caefc8f579
CI / changes (pull_request) Successful in 2s
CI / unit (pull_request) Successful in 11s
CI / integration (pull_request) Successful in 17s
CI / ui (pull_request) Has been skipped
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m19s
Decide who moves first by the official rule: each seated player draws one tile, the one closest to "A" leads (a blank beats every letter), ties re-drawing until a single leader remains. Each draw uses honest per-draw crypto/rand entropy (not the deterministic bag seed), so the recorded draw — not a seed — is the only account of the outcome. The leader takes seat 0, so the engine and journal replay are unchanged. The draw is recorded with the game (game_setup_draws, migration 00013) for future tournaments, designed as a discrete "player N draws a tile" step. Friend/AI games draw at creation. Auto-match draws when the game opens, against a synthetic uuid.Nil opponent whose draw rows (NULL account_id) are back-filled to the real opponent on join — so the opener's seat is fixed up front and the existing open-game pre-move is preserved with no reseating. Admin /_gm/games/:id gains the recorded draw list and a simple step-by-step board replay (game.ReplayTimeline + a vanilla-JS stepper): a board with A-O/1-15 headers and highlighted premium squares, placed letters with their tile value as a subscript, rack panels around the board (seat 0 top, 1 bottom, 2 left, 3 right) with the current player highlighted, and a per-move log with the tiles drawn and the bag remainder. Docs: ARCHITECTURE §6/§9, FUNCTIONAL (+_ru), PRERELEASE (FM row), design spec.
40 lines
1.6 KiB
Go
40 lines
1.6 KiB
Go
//
|
|
// Code generated by go-jet DO NOT EDIT.
|
|
//
|
|
// WARNING: Changes to this file may cause incorrect behavior
|
|
// and will be lost if the code is regenerated
|
|
//
|
|
|
|
package table
|
|
|
|
// UseSchema sets a new schema name for all generated table SQL builder types. It is recommended to invoke
|
|
// this method only once at the beginning of the program.
|
|
func UseSchema(schema string) {
|
|
AccountRoles = AccountRoles.FromSchema(schema)
|
|
AccountStats = AccountStats.FromSchema(schema)
|
|
AccountSuspensions = AccountSuspensions.FromSchema(schema)
|
|
Accounts = Accounts.FromSchema(schema)
|
|
AdCampaigns = AdCampaigns.FromSchema(schema)
|
|
AdMessages = AdMessages.FromSchema(schema)
|
|
AdSettings = AdSettings.FromSchema(schema)
|
|
Blocks = Blocks.FromSchema(schema)
|
|
ChatMessages = ChatMessages.FromSchema(schema)
|
|
Complaints = Complaints.FromSchema(schema)
|
|
DictionaryState = DictionaryState.FromSchema(schema)
|
|
EmailConfirmations = EmailConfirmations.FromSchema(schema)
|
|
FeedbackMessages = FeedbackMessages.FromSchema(schema)
|
|
FriendCodes = FriendCodes.FromSchema(schema)
|
|
Friendships = Friendships.FromSchema(schema)
|
|
GameDrafts = GameDrafts.FromSchema(schema)
|
|
GameHidden = GameHidden.FromSchema(schema)
|
|
GameInvitationInvitees = GameInvitationInvitees.FromSchema(schema)
|
|
GameInvitations = GameInvitations.FromSchema(schema)
|
|
GameMoves = GameMoves.FromSchema(schema)
|
|
GamePlayers = GamePlayers.FromSchema(schema)
|
|
GameSetupDraws = GameSetupDraws.FromSchema(schema)
|
|
Games = Games.FromSchema(schema)
|
|
Identities = Identities.FromSchema(schema)
|
|
Sessions = Sessions.FromSchema(schema)
|
|
SuspensionReasons = SuspensionReasons.FromSchema(schema)
|
|
}
|