4141 InvitationEvent ,
4242 MembershipEvent ,
4343)
44- from .payloads import CampaignCalendarChangedEvent , CampaignCalendarData
44+ from .payloads import (
45+ CampaignCalendarChangedEvent ,
46+ CampaignCalendarData ,
47+ CampaignInvitationChangedEvent ,
48+ CampaignInvitationData ,
49+ CampaignLevelChangedEvent ,
50+ CampaignMemberData ,
51+ CampaignMembershipChangedEvent ,
52+ )
4553from .protocol import (
4654 CommandAcknowledgementEnvelope ,
4755 QueryResultEnvelope ,
@@ -615,7 +623,12 @@ async def _request_response(self, content: dict[str, object], handler) -> None:
615623 request_id = envelope .request_id ,
616624 data = result_data ,
617625 ).model_dump (mode = "json" )
618- elif message_type == "campaign.calendar.adjust" :
626+ elif message_type in {
627+ "campaign.calendar.adjust" ,
628+ "campaign.members.deactivate" ,
629+ "campaign.invites.revoke" ,
630+ "campaign.level.approve" ,
631+ }:
619632 response = CommandAcknowledgementEnvelope (
620633 request_id = envelope .request_id
621634 ).model_dump (mode = "json" )
@@ -770,7 +783,18 @@ def _member_deactivate(self, content: dict[str, object]) -> None:
770783 character .is_archived = True
771784 character .archived_at = timezone .now ()
772785 character .save (update_fields = ("is_active" , "is_archived" , "archived_at" ))
773- notify_campaign_changed (context .campaign_id )
786+ notify_campaign_event (
787+ context .campaign_id ,
788+ CampaignMembershipChangedEvent (
789+ member = CampaignMemberData (
790+ id = candidate .pk ,
791+ username = candidate .user .get_username (),
792+ is_game_master = candidate .kind == CampaignContext .Kind .GM ,
793+ is_active = candidate .is_active ,
794+ ),
795+ request_id = str (content ["request_id" ]),
796+ ),
797+ )
774798
775799 @database_sync_to_async
776800 def _invite_list (self , content : dict [str , object ]) -> list [dict [str , object ]]:
@@ -798,6 +822,15 @@ def _invite_create(self, content: dict[str, object]) -> dict[str, object]:
798822 None ,
799823 [email ],
800824 )
825+ notify_campaign_event (
826+ context .campaign_id ,
827+ CampaignInvitationChangedEvent (
828+ invitation = CampaignInvitationData .model_validate (
829+ self ._invitation_data (invitation )
830+ ),
831+ request_id = str (content ["request_id" ]),
832+ ),
833+ )
801834 return {** self ._invitation_data (invitation ), "link" : link }
802835
803836 @database_sync_to_async
@@ -832,6 +865,15 @@ def _invite_resend(self, content: dict[str, object]) -> dict[str, object]:
832865 None ,
833866 [invitation .delivery_email ],
834867 )
868+ notify_campaign_event (
869+ context .campaign_id ,
870+ CampaignInvitationChangedEvent (
871+ invitation = CampaignInvitationData .model_validate (
872+ self ._invitation_data (invitation )
873+ ),
874+ request_id = str (content ["request_id" ]),
875+ ),
876+ )
835877 return {** self ._invitation_data (invitation ), "link" : link }
836878
837879 @database_sync_to_async
@@ -855,6 +897,15 @@ def _invite_revoke(self, content: dict[str, object]) -> None:
855897 created_by = context ,
856898 reason = InvitationEvent .Reason .REVOKED ,
857899 )
900+ notify_campaign_event (
901+ context .campaign_id ,
902+ CampaignInvitationChangedEvent (
903+ invitation = CampaignInvitationData .model_validate (
904+ self ._invitation_data (invitation )
905+ ),
906+ request_id = str (content ["request_id" ]),
907+ ),
908+ )
858909
859910 @database_sync_to_async
860911 def _level_status (self , content : dict [str , object ]) -> dict [str , object ]:
@@ -876,7 +927,14 @@ def _level_approve(self, content: dict[str, object]) -> dict[str, object]:
876927 context = self ._context ()
877928 _gm (context )
878929 event = approve_campaign_level (context .campaign , created_by = context )
879- notify_campaign_changed (context .campaign_id )
930+ notify_campaign_event (
931+ context .campaign_id ,
932+ CampaignLevelChangedEvent (
933+ previous_level = event .previous_level ,
934+ next_level = event .next_level ,
935+ request_id = str (content ["request_id" ]),
936+ ),
937+ )
880938 return {
881939 "previous_level" : event .previous_level ,
882940 "next_level" : event .next_level ,
0 commit comments