Osobny rekord zdarzenia dla tematu moderacji
Deploy PROD / deploy (push) Successful in 26s

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 <noreply@anthropic.com>
This commit is contained in:
2026-09-04 15:31:38 +02:00
parent 992e6cda01
commit ecece16352
@@ -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. */