Beschreibung: Ein Benutzer bat mich, ihm sein „First Like“-Abzeichen zu entziehen, nachdem er selbst einen Beitrag „entliked“ hatte, das Abzeichen aber immer wieder neu verliehen wurde. Der Kontext kann in meinem vorherigen Beitrag in der Support-Kategorie gefunden werden.
Reproduzierbare Schritte:
Neuen Benutzer erstellen
Einen Beitrag liken
Das „First Like“-Abzeichen erhalten
Den Beitrag entliken
Zu einem Admin-Benutzer wechseln
Zum Admin-Panel des Benutzers wechseln, der den Beitrag geliked hat
Die Option „Abzeichen bearbeiten“ besuchen
Auf „Entziehen“ beim „First Like“-Abzeichen klicken
Eine Weile warten (Ich bin mir nicht sicher, wann der Backfill-Job für dieses spezielle Abzeichen ausgeführt wird, aber ein Tag wird sicherlich ausreichen. Vielleicht versuchen, alle abzeichenbezogenen Jobs in Sidekiq auszulösen, um dies zu beschleunigen?)
Das Abzeichen wird dem Benutzer automatisch wieder verliehen, für denselben Beitrag, der entliked wurde, und am selben Datum, an dem der Like gemacht wurde.
Ich habe das Problem auf diese Zeile der SQL-Abfrage zum Verleihen des Abzeichens eingegrenzt, denn während die Zeile in post_actions für die Like-Aktion nach dem Entliken noch existiert, hat ihre Spalte deleted_at einen Datumswert, den die Abfrage nicht berücksichtigt. Ich glaube, die Korrektur dafür würde die WHERE-Klausel der Unterabfrage ändern zu:
WHERE post_action_type_id = 2 AND
pa.deleted_at IS NULL AND
(:backfill OR pa.post_id IN (:post_ids) )
aber ich habe keine Entwicklungsumgebung eingerichtet und nicht viel Zeit, um diese Korrektur selbst zu testen.
Priorität/Schweregrad: Ich habe dieses Problem für mich gelöst, indem ich die entsprechenden post_actions-Zeilen bereits gelöscht habe, und ich habe noch nie eine solche Anfrage erhalten. Ich schätze, das macht es nicht zu einer sehr hohen Priorität?
Sie haben einen Beitrag geliked. Das Entliken eines Beitrags ändert nichts daran, dass sie bewiesen haben, dass sie wissen, wie man einen Beitrag liked. Vielleicht sind sie für einen „First Unlike“-Badge berechtigt, aber jetzt, wo sie einen Beitrag geliked haben, haben sie einen Beitrag geliked. Sie erhalten den Badge dafür, dass sie einen Beitrag geliked haben. Man kann die Glocke nicht wieder läuten.
Das ist meine Vermutung.
Ihre Lösung war sehr clever. Eine andere Möglichkeit, ihren Badge zu entfernen, wäre, den Benutzer zu löschen.
Das stimmt, aber ich glaube immer noch, dass es kontraintuitiv ist, wie ich als Administrator diese Auszeichnung nicht von dem Benutzer widerrufen kann, selbst nachdem er den Beitrag entliked hat. Zumindest sollte es eine Art Hinweis auf der Schaltfläche „Widerrufen“ in der Ansicht „Auszeichnungen bearbeiten“ geben, wie die Auszeichnung nicht widerrufen werden kann? Anstatt des aktuellen Verhaltens, das die Auszeichnung bei einem Backfilling-Job stillschweigend wieder gewährt, wodurch sich der Administrator fragt, ob er wirklich auf diese Schaltfläche geklickt hat oder nicht.
Dies wurde zu einem Feature verschoben. Ich schätze, die Feature-Anfrage lautet:
Ermöglichen Sie den vollständigen Widerruf eines neu bewerteten Abzeichens
oder
Verbannen Sie Administratoren vom Widerruf von Abzeichen, die SQL-basiert sind / wiederkehrend bewertete Abzeichen sind
Vorerst empfehle ich “nicht tun”, aber die Administratorerfahrung könnte sicherlich besser sein.