diff --git a/.gitignore b/.gitignore index 313f030..ffc7316 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,3 @@ __pycache__/ data/ .env -*.edgeql diff --git a/dbschema/migrations/00001-m1ezdfn.edgeql b/dbschema/migrations/00001-m1ezdfn.edgeql new file mode 100644 index 0000000..07f1842 --- /dev/null +++ b/dbschema/migrations/00001-m1ezdfn.edgeql @@ -0,0 +1,89 @@ +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; + }; + }; +};