0b57400c6f
CI / changes (pull_request) Successful in 1s
CI / unit (pull_request) Successful in 9s
CI / integration (pull_request) Successful in 13s
CI / ui (pull_request) Successful in 46s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m9s
Surface the per-game "single word" rule to the client and refine the random-opponent New Game screen. - Wire: thread multiple_words_per_turn into the GameView and Invitation FlatBuffers tables (Go + TS regenerated), through pkg/wire builders and both the backend push-event and gateway REST paths. - In-game indicators (single-word games only): a small 1 in the status bar's score-preview slot (yields to the live preview) and a centred "One word per turn" label in the history-drawer header. Standard games show neither. - Invitation card gains a "One word per turn" line for single-word invitations. - Auto-match redesign: variant plaques are mutually-exclusive selects (highlight on tap, no longer enqueue); a lone offered variant is pre-selected; a bottom "Start game" button (disabled until a variant is chosen) confirms. The rule toggle appears once a Russian variant is selected. - Tests: e2e for the new auto flow and the in-game indicator (mock g3 is a single-word game); mock/data + fixtures carry the new field. Docs: UI_DESIGN.
92 lines
3.0 KiB
Go
92 lines
3.0 KiB
Go
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
|
|
MultipleWordsPerTurn bool
|
|
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
|
|
MultipleWordsPerTurn bool
|
|
DropoutTiles string
|
|
Status string
|
|
GameID string
|
|
ExpiresAtUnix int64
|
|
}
|