From cf45aa60aaf93d80c80d328d80543bce47727e78 Mon Sep 17 00:00:00 2001 From: Daniel Dolezal Date: Wed, 8 May 2024 14:40:47 +0200 Subject: [PATCH] remove calculations from snake and move it into moves --- dbschema/default.esdl | 17 +++++++++-------- server/storage/EdgeDB.py | 32 +++++++++++++++++++------------- 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/dbschema/default.esdl b/dbschema/default.esdl index dcc7154..6b1c801 100644 --- a/dbschema/default.esdl +++ b/dbschema/default.esdl @@ -34,9 +34,10 @@ module default { readonly := true; on source delete delete target; } - required single snake: Snake { + single snake: Snake { readonly := true; on source delete delete target; + on target delete allow; } } @@ -47,6 +48,7 @@ module default { required is_ladder: bool { readonly := true; } + #constraint exclusive on ( (.name, .is_ladder) ); } type Ruleset { @@ -59,16 +61,13 @@ module default { required settings: json { readonly := true; } + #constraint exclusive on ( (.name, .version, .settings) ); } type Snake { required type: str { readonly := true; } - required multi calculations: Calculations { - readonly := true; - on source delete delete target; - } } type Moves { @@ -81,12 +80,14 @@ module default { required game_board: json { readonly := true; } + single calculations: Calculations { + readonly := true; + on source delete delete target; + on target delete allow; + } } type Calculations { - required turn: int32 { - readonly := true; - } required data: array { readonly := true; } diff --git a/server/storage/EdgeDB.py b/server/storage/EdgeDB.py index 200896c..d2ba677 100644 --- a/server/storage/EdgeDB.py +++ b/server/storage/EdgeDB.py @@ -19,6 +19,16 @@ class EdgeDB: is_ladder=is_ladder ) + def create_moves_with_calculations(self, game_board:GameBoard): + data = [] + moves = game_board.turns + snake_calulations = [[calc for calc in ele["data"]] for ele in game_board.snake_class.get_history() ] + + for i in range(len(moves)): + data.append({"turn": moves[i]["turn"], "move": moves[i]["move"], "game_board": moves[i]["game_board"], "calculations": snake_calulations[i]}) + + return data + def insert(self, game_board:GameBoard): game_type = game_board.get_type_of_game() @@ -31,12 +41,17 @@ class EdgeDB: map := $map, winner := $winner, moves := ( - with input_data := > >$moves + with input_data := >>>$moves for data in array_unpack(input_data) insert Moves { turn := data.turn, snake_move := data.`move`, - game_board := data.game_board + game_board := data.game_board, + calculations := ( + insert Calculations { + data := data.calculations + } + ) } ), type := ( @@ -54,15 +69,7 @@ class EdgeDB: ), snake := ( insert Snake { - type := $snake_type, - calculations := ( - with input_data := >> >$calculations - for tupel_data in array_unpack(input_data) - insert Calculations { - turn := tupel_data.turn, - data := tupel_data.data - } - ) + type := $snake_type } ) }""", @@ -73,7 +80,7 @@ class EdgeDB: turns=game_board.turn, map=game_board.map if game_board.map else "standard", winner=', '.join(game_board.winner_snake_names) if game_board.winner_snake_names else "", - moves=[ tuple([ele["turn"], ele["move"], json.dumps(ele["game_board"])]) for ele in game_board.turns ], + moves=[ tuple([x["turn"], x["move"], json.dumps(x["game_board"]), [ json.dumps(ele) for ele in x["calculations"] ] ]) for x in self.create_moves_with_calculations(game_board) ], game_type=game_type["name"], is_ladder=game_type["is_ladder"], @@ -83,7 +90,6 @@ class EdgeDB: settings=json.dumps(game_board.ruleset["settings"]), snake_type=game_board.snake_class.__class__.__name__, - calculations=[ tuple([ele["turn"], [json.dumps(calc) for calc in ele["data"]]]) for ele in game_board.snake_class.get_history() ], ) def save(self, game_board:GameBoard):