CREATE MIGRATION m1ezdfntpqrmuj2yefl7glg5bbtt6zqp3jjsf2i7jhroz6gm7j5s5q ONTO initial { CREATE FUNCTION default::gameboard_url(id: std::uuid) -> std::str USING (('https://play.battlesnake.com/game/' ++ id)); CREATE FUNCTION default::is_winner_me(winner: std::str) -> std::bool USING ((winner = 'me')); CREATE TYPE default::GameType { CREATE REQUIRED PROPERTY is_ladder: std::bool { SET readonly := true; }; CREATE REQUIRED PROPERTY name: std::str { SET readonly := true; }; CREATE CONSTRAINT std::exclusive ON ((.name, .is_ladder)); }; CREATE TYPE default::Moves { CREATE PROPERTY calculations: array { SET readonly := true; }; CREATE REQUIRED PROPERTY game_board: std::json { SET readonly := true; }; CREATE REQUIRED PROPERTY snake_move: std::str { SET readonly := true; }; CREATE REQUIRED PROPERTY turn: std::int32 { SET readonly := true; }; }; CREATE TYPE default::Ruleset { CREATE REQUIRED PROPERTY name: std::str { SET readonly := true; }; CREATE REQUIRED PROPERTY settings: std::json { SET readonly := true; }; CREATE REQUIRED PROPERTY version: std::str { SET readonly := true; }; CREATE CONSTRAINT std::exclusive ON ((.name, .version, .settings)); }; CREATE TYPE default::Snake { CREATE REQUIRED PROPERTY type: std::str { SET readonly := true; }; CREATE CONSTRAINT std::exclusive ON (.type); }; CREATE TYPE default::GameBoard { ALTER PROPERTY id { SET OWNED; SET readonly := true; SET REQUIRED; SET TYPE std::uuid; ALTER CONSTRAINT std::exclusive { SET OWNED; }; }; CREATE PROPERTY url := (default::gameboard_url(.id)); CREATE REQUIRED PROPERTY winner: std::str { SET readonly := true; }; CREATE PROPERTY is_winner_me := (default::is_winner_me(.winner)); CREATE REQUIRED MULTI LINK moves: default::Moves { ON SOURCE DELETE DELETE TARGET; SET readonly := true; }; CREATE REQUIRED SINGLE LINK ruleset: default::Ruleset { ON SOURCE DELETE DELETE TARGET IF ORPHAN; SET readonly := true; }; CREATE REQUIRED SINGLE LINK snake: default::Snake { ON SOURCE DELETE DELETE TARGET IF ORPHAN; SET readonly := true; }; CREATE REQUIRED SINGLE LINK type: default::GameType { ON SOURCE DELETE DELETE TARGET IF ORPHAN; SET readonly := true; }; CREATE REQUIRED PROPERTY created_at: std::datetime { SET readonly := true; }; CREATE REQUIRED PROPERTY map: std::str { SET default := 'standard'; SET readonly := true; }; CREATE REQUIRED PROPERTY turns: std::int32 { SET readonly := true; }; }; };