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:
@@ -114,7 +114,18 @@ public class InteractionBroadcaster {
|
|||||||
* i nie pokazywal przy nich przyciskow wyciszenia ani blokady.
|
* i nie pokazywal przy nich przyciskow wyciszenia ani blokady.
|
||||||
*/
|
*/
|
||||||
public void moderation(Long webinarId, String kind, ModeratorInteractionView interaction) {
|
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`. */
|
/** 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. */
|
/** Koperta zdarzenia o zadaniu. */
|
||||||
|
|||||||
Reference in New Issue
Block a user