94 lines
2.9 KiB
Python
94 lines
2.9 KiB
Python
from server.GameBoard import GameBoard
|
|
|
|
from datetime import datetime
|
|
import edgedb, json
|
|
|
|
class EdgeDB:
|
|
def __init__(self, **kwargs):
|
|
self.client = edgedb.create_client(
|
|
tls_security="insecure"
|
|
)
|
|
|
|
def insert_game_type(self, name:str, is_ladder:bool):
|
|
return self.client.query_required_single("""
|
|
insert GameType {
|
|
name := <str>$name,
|
|
is_ladder := <bool>$is_ladder
|
|
}""",
|
|
name=name,
|
|
is_ladder=is_ladder
|
|
)
|
|
|
|
def insert(self, game_board:GameBoard):
|
|
game_type = game_board.get_type_of_game()
|
|
|
|
self.client.query("""
|
|
insert GameBoard {
|
|
id := <uuid>$id,
|
|
url := <str>$url,
|
|
created_at := <datetime>$created_at,
|
|
turns := <int32>$turns,
|
|
map := <str>$map,
|
|
winner := <str>$winner,
|
|
moves := (
|
|
with input_data := <array <tuple <turn: int32, `move`: str, game_board: json>> >$moves
|
|
for data in array_unpack(input_data)
|
|
insert Moves {
|
|
turn := data.turn,
|
|
snake_move := data.`move`,
|
|
game_board := data.game_board
|
|
}
|
|
),
|
|
type := (
|
|
insert GameType {
|
|
name := <str>$game_type,
|
|
is_ladder := <bool>$is_ladder
|
|
}
|
|
),
|
|
ruleset := (
|
|
insert Ruleset {
|
|
name := <str>$ruleset,
|
|
version := <str>$version,
|
|
settings := to_json(<str>$settings)
|
|
}
|
|
),
|
|
snake := (
|
|
insert Snake {
|
|
type := <str>$snake_type,
|
|
calculations := (
|
|
with input_data := <array <tuple <turn: int32, data: array<json>>> >$calculations
|
|
for tupel_data in array_unpack(input_data)
|
|
insert Calculations {
|
|
turn := tupel_data.turn,
|
|
data := tupel_data.data
|
|
}
|
|
)
|
|
}
|
|
)
|
|
}""",
|
|
|
|
id=game_board.id,
|
|
url=game_board.url if game_board.url else "",
|
|
created_at=datetime.fromtimestamp(game_board.now_date.timestamp(), game_board.now_date.astimezone().tzinfo),
|
|
turns=game_board.turn,
|
|
map=game_board.map,
|
|
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 ],
|
|
|
|
game_type=game_type["name"],
|
|
is_ladder=game_type["is_ladder"],
|
|
|
|
ruleset=game_board.ruleset["name"],
|
|
version=game_board.ruleset["version"],
|
|
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):
|
|
self.insert(game_board)
|
|
|
|
def __del__(self):
|
|
self.client.close()
|