package notify // The structs below are the wire-agnostic inputs the domain services hand to the // enriched event constructors. Keeping them here — rather than importing the wire // schema into game/lobby/social — preserves the package boundary: notify owns the // FlatBuffers encoding, while the domain only fills in already-resolved values (seat // display names, alphabet-index racks). Each mirrors the matching scrabblefb table. // SeatStanding is one seat's public standing inside a GameSummary (mirrors // scrabblefb.SeatView). type SeatStanding struct { Seat int AccountID string DisplayName string Score int HintsUsed int IsWinner bool } // GameSummary is the shared, non-private game state embedded in enriched events // (mirrors scrabblefb.GameView). LastActivityUnix is the lobby sort key: the current // turn's start for an active game, the finish time once finished. type GameSummary struct { ID string Variant string DictVersion string Status string Players int ToMove int TurnTimeoutSecs int MoveCount int EndReason string Seats []SeatStanding LastActivityUnix int64 } // AlphabetLetter is one variant alphabet entry (a display-only row) embedded in an // initial PlayerState so a client seeing a variant for the first time can render its // rack (mirrors scrabblefb.AlphabetEntry). type AlphabetLetter struct { Index int Letter string Value int } // PlayerState is a player's full initial view of a game — the shared summary plus // their private rack and budgets (mirrors scrabblefb.StateView). Rack carries wire // alphabet indices (a blank is the sentinel index 255). Alphabet is set only when the // recipient may not have cached the variant yet (match_found / game_started). type PlayerState struct { Game GameSummary Seat int Rack []int BagLen int HintsRemaining int Alphabet []AlphabetLetter } // AccountRef is a referenced account with its display name resolved (mirrors // scrabblefb.AccountRef). type AccountRef struct { AccountID string DisplayName string } // InvitationInvitee is one invited player's seat and response inside an // InvitationSummary (mirrors scrabblefb.InvitationInvitee). type InvitationInvitee struct { AccountID string DisplayName string Seat int Response string } // InvitationSummary is a friend-game invitation carried by the NotifyInvitation event so // the client adds it to its lobby list without a refetch (mirrors scrabblefb.Invitation). type InvitationSummary struct { ID string Inviter AccountRef Invitees []InvitationInvitee Variant string TurnTimeoutSecs int HintsAllowed bool HintsPerPlayer int DropoutTiles string Status string GameID string ExpiresAtUnix int64 }