Wir haben es geschafft. User können etwas zu einem Achievement contributen (party). Im letzten Sprint haben wir noch an der Anzeige der Achievements gearbeitet. In diesem haben wir uns um das Contributen selbst gekümmert. D.h. ein contributeter Wert wird nun ins Backend übertragen, gespeichert und der ProgressBar zur Anzeige des offenen Contributes im UI aktualisiert.
Contributen mehrere Personen parallel werten wir die Eingaben aus und zeigen entsprechende Meldungen an. Dafür haben wir zum ersten Mal ein DTO (Data Transfer Object) eingeführt, das lediglich aus zusammengesetzten Attributen besteht und keine eigene Entität (wie Teams, User, Achievement) darstellt. Beim Contributen wird es als Ergebnis aus dem Backend ans Frontend übertragen. Es enthält den RequestedContributedValue (was sollte beigesteuert werden?), den ActualContributedValue (was wurde tatsächlich begesteuert?) und das betroffene Achievement. Denn wurde bei einem gleichzeitigen Contribute mehrerer Benutzer das Achievement completed oder konnte nur noch ein Teil contributet werden, bekommt der Benutzer Bescheid: „Ey, während du versucht hast zu contributen, hat ein anderer Benutzer das Achievement bereits completed. Bitte contribute doch stattdessen bei einem anderen Achievement den Rest deines Contributes.“
An dieser Sharing-Funktion müssen wir allerdings noch arbeiten. Denn was ist der gemeinsame Nenner, die gemeinsame Einheit für „365 Tage im Jahr“ und „1000 Ball Catches“? 1 Ball Catch ist nicht gleich bedeutend mit einem Tag Snowboarden im Jahr.
Wir haben ebenfalls darüber gesprochen, dass ein Achievement doch eigentlich das Ergebnis eines Abschlusses einer Challenge ist. Müssten Achievements also nicht zuvor Challenges heißen? Darum müssen wir uns noch kümmern.
Ach, hier noch ein Screen von unserer Contribute-Progress-Funktion. Warum auch nicht?
Hm, an weiteren Themen haben wir nicht groß gearbeitet :?.
Das Achievement-Bild wurde mit jedem Klick auf Plus oder Minus – um den ContributeValue zu erhöhen – neu geladen und hat zu einem unangenehmen Blink-Effekt geführt, den wir gefixt haben.
Außerdem fehlte noch die Aktualisierung der Achievement-Übersicht nach dem Contributen, denn dort wird sowohl der Contribute-Progress, als auch ein Datum eingeblendet, wenn das Achievement erreicht / die Challenge abgeschlossen wurde.
Wir haben uns zusätzlich um die Erweiterung der Builder gekümmert, die wir für das Aufbauen von Test-Szenarien beim Starten des Webservers nutzen. Bspw. wurde aus dem Pool von Achievements eines zufällig ausgewählt und einem User oder Team zugeordnet. Zu Beginn schien das eine super Erleichterung zu sein. Allerdings stellten wir fest: auch der Aufbau von immer identischen Szenarien macht Sinn, um immer wieder den selben Sachverhalt zu testen.
Und was steht demnächst an? Zu Beginn dürften dem User keine Achievements / Challenges zugeordnet sein, wie es noch der Fall ist. Stattdessen müsste sich der User für eine Challenge entscheiden und contributen. Erst danach dürfte ihm das Item in seinem Bereich angezeigt werden. Außerdem wollen wir jeden Contribute speichern. Vielleicht motiviert es manch einen, wenn wir die Möglichkeit bieten anzuzeigen, was contributet wurde.