From ecece163526882ee4effba0539520000d2ee9093 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Zatorski?= Date: Fri, 4 Sep 2026 15:31:38 +0200 Subject: [PATCH] Osobny rekord zdarzenia dla tematu moderacji Poprzedni commit zmienil typ w rekordzie `Event` na `ModeratorInteractionView`, a ten sam rekord obsluguje TAKZE temat publiczny: `chatPosted`, `chatRemoved`, `questionPublished`, `questionUpdated` i `questionRemoved` przekazuja do niego `InteractionView`. Build backendu przestal sie kompilowac z trzema bledami "incompatible types". Wdrozenie zatrzymalo sie na tym etapie, wiec produkcja zostala na poprzednim obrazie i dzialala bez przerwy. `Event` wraca do widoku publicznego, a temat moderacji dostaje wlasny rekord `ModeratedInteractionEvent`. Jeden wspolny dla obu tematow byl zreszta zla konstrukcja niezaleznie od bledu: zmiana typu w jednym miejscu cicho przepuszczalaby dane moderacji na strumien publiczny albo odwrotnie, a to jest granica prywatnosci, nie szczegol implementacji. Nazwa `ModerationEvent` byla juz zajeta przez zdarzenie o wyciszeniu i zablokowaniu uczestnika, ktore niesie sam identyfikator zapisu. Trzy rozne zdarzenia maja teraz trzy rozne rekordy. Blad wyszedl dopiero na wdrozeniu, bo backendu nie da sie u mnie skompilowac: nie ma Mavena ani Dockera, a proba zlozenia classpath z lokalnego repozytorium konczy sie kolizja starych bibliotek `javax` z `jakarta` i brakiem Lomboka. Sprawdzone wiec porownaniem sygnatur: piec wywolan `new Event(...)` odpowiada pieciu metodom przyjmujacym `InteractionView`, a lancuch moderacji ma `ModeratorInteractionView` na kazdym etapie. Co-Authored-By: Claude Opus 5 --- .../interaction/InteractionBroadcaster.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/com/softspm/webinar/interaction/InteractionBroadcaster.java b/backend/src/main/java/com/softspm/webinar/interaction/InteractionBroadcaster.java index 9fd2dcf..13e8aee 100644 --- a/backend/src/main/java/com/softspm/webinar/interaction/InteractionBroadcaster.java +++ b/backend/src/main/java/com/softspm/webinar/interaction/InteractionBroadcaster.java @@ -114,7 +114,18 @@ public class InteractionBroadcaster { * i nie pokazywal przy nich przyciskow wyciszenia ani blokady. */ public void moderation(Long webinarId, String kind, ModeratorInteractionView interaction) { - messaging.convertAndSend(moderationTopic(webinarId), new Event(kind, interaction)); + messaging.convertAndSend(moderationTopic(webinarId), new ModeratedInteractionEvent(kind, interaction)); + } + + /** + * Zdarzenie na temacie MODERACJI, wylacznie dla panelu prowadzacego. + * + * Osobny rekord od `Event`, bo niesie inny widok: pelny, z identyfikatorem + * zapisu autora i jego stanem wyciszenia. Jeden wspolny rekord dla obu + * tematow oznaczalby, ze zmiana typu w jednym miejscu cicho przepuszcza + * dane moderacji na strumien publiczny albo odwrotnie. + */ + public record ModeratedInteractionEvent(String kind, ModeratorInteractionView payload) { } /** @@ -163,7 +174,11 @@ public class InteractionBroadcaster { } /** Koperta zdarzenia. `kind` mowi odbiorcy, co zrobic z `payload`. */ - public record Event(String kind, ModeratorInteractionView payload) { + /** + * Zdarzenie na temacie PUBLICZNYM: czat i pytania widoczne dla wszystkich + * obecnych. Niesie widok bez identyfikatora zapisu i bez adresu e-mail. + */ + public record Event(String kind, InteractionView payload) { } /** Koperta zdarzenia o zadaniu. */