Database schema
All data lives in one DynamoDB table per stage (abstract-play-dev, abstract-play-prod). The partition key (pk) names a logical record family; the sort key (sk) scopes items within that family.
Most access patterns use Query on pk with optional begins_with on sk. See subsystem pages for how each family is read and written.
Games
-
Games — full game state
- pk:
GAME - sk:
<metaGame>#<completedbit>#<gameid>
- pk:
-
Game comments — chat for a game
- pk:
GAMECOMMENTS - sk:
<gameid>
- pk:
-
Notes — per-user notes on a game
- pk:
NOTE - sk:
<gameId>#<userid>
- pk:
Users
-
Users — profile, settings, dashboard game/challenge lists
- pk:
USER - sk:
<userid>
- pk:
-
Push subscriptions — web push endpoints
- pk:
PUSH - sk:
<userid>
- pk:
-
User list — public directory (name, country, lastSeen, stars)
- pk:
USERS - sk:
<userid>
- pk:
-
Tags — per-user game tags
- pk:
TAG - sk:
<userid>
- pk:
-
Palettes — per-user UI color palettes
- pk:
PALETTES - sk:
<userid>
- pk:
-
Customizations — per-user, per-game UI settings
- pk:
CUSTOMIZATION#<userid> - sk:
<metaGame>
- pk:
-
Playground — sandbox game state for a user
- pk:
PLAYGROUND - sk:
<userid>
- pk:
-
Player relations — blocking (bidirectional)
- pk:
PLAYER#<blockingPlayerId>, sk:BLOCKED#<blockedPlayerId> - pk:
PLAYER#<blockedPlayerId>, sk:BLOCKEDBY#<blockingPlayerId>
- pk:
Game lists
-
All completed games — not currently used in the UI
- pk:
COMPLETEDGAMES - sk:
<timestamp>#<gameid>
- pk:
-
Completed games by metaGame and player — not used yet
- pk:
COMPLETEDGAMES#<metaGame>#<userid> - sk:
<timestamp>#<gameid>
- pk:
-
Completed games by metaGame — summary rows for the completed-games page
- pk:
COMPLETEDGAMES#<metaGame> - sk:
<timestamp>#<gameid>
- pk:
-
Completed games by player — one item per player per game
- pk:
COMPLETEDGAMES#<userid> - sk:
<timestamp>#<gameid>
- pk:
Exploration
- Game exploration — move tree for a game position entered by a user
- pk:
GAMEEXPLORATION#<gameid> - sk:
<userid>#<movenumber>
- pk:
Ratings and meta games
-
Ratings — per metaGame leaderboard data
- pk:
RATINGS#<metaGame> - sk:
<userid>
- pk:
-
Meta game counts — aggregate stats (current games, completed games, standing challenges, stars, etc.)
- pk:
METAGAMES - sk:
COUNTS
- pk:
Challenges
-
Standing challenges — open challenges listed by game
- pk:
STANDINGCHALLENGE#<metaGame> - sk:
<challengeid>
- pk:
-
Direct challenges — challenge details
- pk:
CHALLENGE - sk:
<challengeid>
- pk:
-
SDG-style standing requests — standing requests for open challenges with a limit
- pk:
REALSTANDING - sk:
<userid>
- pk:
Bots
-
Bot identity — Cognito client linkage and owner
- pk:
BOT - sk:
<clientId>
- pk:
-
Bot display name reservation
- pk:
BOTNAME - sk:
<normalizedName>
- pk:
Automated tournaments
-
Tournaments — signup or in-progress tournaments
- pk:
TOURNAMENT - sk:
<tournamentid>
- pk:
-
Tournament player — player reference
- pk:
TOURNAMENTPLAYER - sk:
<tournamentid>#<division>#<playerid>
- pk:
-
Tournament game — game reference
- pk:
TOURNAMENTGAME - sk:
<tournamentid>#<division>#<gameid>
- pk:
-
Completed tournaments
- pk:
COMPLETEDTOURNAMENT - sk:
<metaGame>#<tournamentid>
- pk:
-
Tournament counter — per metaGame + variants combination (
variantsis a sorted, pipe-delimited variant list)- pk:
TOURNAMENTSCOUNTER - sk:
<metaGame>#<variants> - fields:
counter,over
- pk:
Organized events
-
Events — organizer-run event details
- pk:
ORGEVENT - sk:
<eventid>
- pk:
-
Event players
- pk:
ORGEVENTPLAYER - sk:
<eventid>#<playerid>
- pk:
-
Event games
- pk:
ORGEVENTGAME - sk:
<eventid>#<gameid>
- pk:
WebSockets
- WebSocket connections — active API Gateway connection registry
- pk:
wsConnections - sk:
<connectionId>
- pk: