module default { type GameBoard { overloaded required id: uuid { readonly := true; constraint exclusive; } url: str { readonly := true; } required created_at: datetime { readonly := true; } required turns: int32 { readonly := true; } required map: str { readonly := true; } required single type: GameType { readonly := true; constraint exclusive; on source delete delete target; } required single ruleset: Ruleset { readonly := true; constraint exclusive; on source delete delete target; } required winner: str { readonly := true; } required multi moves: Moves { readonly := true; on source delete delete target; } single snake: Snake { readonly := true; on source delete delete target; on target delete allow; } } type GameType { required name: str { readonly := true; } required is_ladder: bool { readonly := true; } #constraint exclusive on ( (.name, .is_ladder) ); } type Ruleset { required name: str { readonly := true; } required version: str { readonly := true; } required settings: json { readonly := true; } #constraint exclusive on ( (.name, .version, .settings) ); } type Snake { required type: str { readonly := true; } #constraint exclusive on .type; } type Moves { required turn: int32 { readonly := true; } required snake_move: str { readonly := true; } required game_board: json { readonly := true; } single calculations: Calculations { readonly := true; on source delete delete target; on target delete allow; } } type Calculations { required data: array { readonly := true; } } }