2024-08-08 17:13:29 +02:00
|
|
|
from sqlmodel import create_engine, SQLModel, Session, select
|
2024-08-03 15:42:19 +02:00
|
|
|
from src.config import definitions
|
2024-08-08 17:13:29 +02:00
|
|
|
from typing import Union
|
|
|
|
|
|
2024-08-11 20:21:54 +02:00
|
|
|
from src.classes import boardgame_classes, play_classes
|
2024-08-03 15:42:19 +02:00
|
|
|
|
|
|
|
|
sqlite_url = definitions.SQLITE_URL
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
connect_args = {"check_same_thread": False}
|
2024-08-12 20:11:34 +02:00
|
|
|
engine = create_engine(sqlite_url, echo=True, connect_args=connect_args)
|
2024-08-03 15:42:19 +02:00
|
|
|
|
2024-08-12 20:11:34 +02:00
|
|
|
def get_session():
|
|
|
|
|
with Session(engine) as session:
|
|
|
|
|
return session
|
2024-08-12 12:08:08 +02:00
|
|
|
|
|
|
|
|
def add_boardgame(session: Session, boardgame: Union[
|
2024-08-08 17:13:29 +02:00
|
|
|
boardgame_classes.BoardGame, boardgame_classes.BoardGameExpansion,
|
|
|
|
|
boardgame_classes.OwnedBoardGame, boardgame_classes.OwnedBoardGameExpansion,
|
|
|
|
|
boardgame_classes.WishlistBoardGame, boardgame_classes.WishlistBoardGameExpansion]):
|
|
|
|
|
|
2024-08-12 12:08:08 +02:00
|
|
|
is_boardgame_present = len(session.exec(
|
|
|
|
|
select(boardgame.__class__).where(boardgame.__class__.id == boardgame.id)
|
|
|
|
|
).all()) != 0
|
|
|
|
|
|
|
|
|
|
if not is_boardgame_present:
|
|
|
|
|
session.add(boardgame)
|
|
|
|
|
|
|
|
|
|
session.commit()
|
|
|
|
|
|
|
|
|
|
def add_multiple_boardgames(session: Session, boardgame_list: list[Union[
|
|
|
|
|
boardgame_classes.BoardGame, boardgame_classes.BoardGameExpansion,
|
|
|
|
|
boardgame_classes.OwnedBoardGame, boardgame_classes.OwnedBoardGameExpansion,
|
|
|
|
|
boardgame_classes.WishlistBoardGame, boardgame_classes.WishlistBoardGameExpansion]]):
|
|
|
|
|
|
|
|
|
|
for boardgame in boardgame_list:
|
2024-08-11 15:58:07 +02:00
|
|
|
is_boardgame_present = len(session.exec(
|
2024-08-12 12:08:08 +02:00
|
|
|
select(boardgame.__class__).where(boardgame.__class__.id == boardgame.id)
|
|
|
|
|
).all()) != 0
|
2024-08-08 17:13:29 +02:00
|
|
|
|
2024-08-11 15:58:07 +02:00
|
|
|
if not is_boardgame_present:
|
|
|
|
|
session.add(boardgame)
|
2024-08-08 17:56:22 +02:00
|
|
|
|
2024-08-12 12:08:08 +02:00
|
|
|
session.commit()
|
|
|
|
|
|
2024-08-13 10:35:25 +02:00
|
|
|
def get_boardgame(session: Session, boardgame_id: int) -> Union[
|
|
|
|
|
boardgame_classes.BoardGame, boardgame_classes.BoardGameExpansion]:
|
2024-08-12 12:08:08 +02:00
|
|
|
|
2024-08-14 09:19:02 +02:00
|
|
|
statement = select(boardgame_classes.BoardGame).where(boardgame_classes.BoardGame.id == boardgame_id)
|
2024-08-13 10:35:25 +02:00
|
|
|
|
|
|
|
|
base_boardgames = session.exec(statement).all()
|
|
|
|
|
|
2024-08-14 09:19:02 +02:00
|
|
|
statement = select(boardgame_classes.BoardGameExpansion).where(boardgame_classes.BoardGameExpansion.id == boardgame_id)
|
2024-08-12 12:08:08 +02:00
|
|
|
|
2024-08-13 10:35:25 +02:00
|
|
|
expansion_boardgames = session.exec(statement).all()
|
|
|
|
|
|
|
|
|
|
returned_boardgames = base_boardgames + expansion_boardgames
|
2024-08-12 20:35:12 +02:00
|
|
|
|
|
|
|
|
if len(returned_boardgames) == 0:
|
2024-08-12 12:08:08 +02:00
|
|
|
boardgame = None
|
|
|
|
|
else:
|
2024-08-14 09:19:02 +02:00
|
|
|
boardgame = returned_boardgames[0]
|
2024-08-12 12:08:08 +02:00
|
|
|
|
|
|
|
|
return boardgame
|
2024-08-12 20:39:25 +02:00
|
|
|
|
2024-08-14 10:02:25 +02:00
|
|
|
def get_multiple_boardgames(session: Session, boardgame_type: SQLModel, boardgame_ids: list[int]) -> tuple[Union[
|
|
|
|
|
list[boardgame_classes.BoardGame], list[boardgame_classes.BoardGameExpansion]], list[int]]:
|
2024-08-08 18:13:18 +02:00
|
|
|
|
|
|
|
|
|
2024-08-14 10:08:07 +02:00
|
|
|
statement = select(boardgame_type).where(boardgame_type.id.in_(boardgame_ids))
|
|
|
|
|
results = session.exec(statement)
|
2024-08-08 18:13:18 +02:00
|
|
|
|
2024-08-14 10:08:07 +02:00
|
|
|
boardgames = results.all()
|
2024-08-14 10:02:25 +02:00
|
|
|
|
2024-08-14 10:08:07 +02:00
|
|
|
missing_boardgame_ids = list(filter(lambda x: x not in [boardgame.id for boardgame in boardgames], boardgame_ids))
|
|
|
|
|
|
|
|
|
|
return boardgames, missing_boardgame_ids
|
2024-08-08 18:13:18 +02:00
|
|
|
|
2024-08-12 12:08:08 +02:00
|
|
|
def get_all_boardgames(session: Session, boardgame_type: SQLModel) -> Union[
|
|
|
|
|
list[boardgame_classes.BoardGame], list[boardgame_classes.BoardGameExpansion],
|
|
|
|
|
list[boardgame_classes.OwnedBoardGame], list[boardgame_classes.OwnedBoardGameExpansion],
|
|
|
|
|
list[boardgame_classes.WishlistBoardGame], list[boardgame_classes.WishlistBoardGameExpansion]]:
|
2024-08-11 21:27:59 +02:00
|
|
|
|
2024-08-12 12:08:08 +02:00
|
|
|
statement = select(boardgame_type)
|
|
|
|
|
|
|
|
|
|
results = session.exec(statement)
|
|
|
|
|
|
|
|
|
|
boardgame_list = results.all()
|
2024-08-11 21:27:59 +02:00
|
|
|
|
2024-08-12 12:08:08 +02:00
|
|
|
return boardgame_list
|
2024-08-11 15:58:07 +02:00
|
|
|
|
2024-08-12 12:08:08 +02:00
|
|
|
def add_play(session: Session, play: play_classes.Play):
|
2024-08-11 20:21:54 +02:00
|
|
|
|
2024-08-12 12:08:08 +02:00
|
|
|
session.add(play)
|
2024-08-11 21:27:59 +02:00
|
|
|
|
2024-08-12 12:08:08 +02:00
|
|
|
session.commit()
|
|
|
|
|
session.refresh(play)
|
2024-08-11 21:27:59 +02:00
|
|
|
|
2024-08-12 20:39:25 +02:00
|
|
|
def add_multiple_plays(session: Session, play_list: list[play_classes.Play]):
|
|
|
|
|
|
|
|
|
|
for play in play_list:
|
|
|
|
|
is_play_present = len(session.exec(select(play_classes.Play).where(play_classes.Play.id == play.id)).all()) != 0
|
|
|
|
|
|
|
|
|
|
if not is_play_present:
|
|
|
|
|
session.add(play)
|
|
|
|
|
|
|
|
|
|
session.commit()
|
2024-08-11 21:27:59 +02:00
|
|
|
|
2024-08-12 12:08:08 +02:00
|
|
|
def get_plays(session: Session) -> list[play_classes.Play]:
|
|
|
|
|
statement = select(play_classes.Play)
|
|
|
|
|
results = session.exec(statement)
|
|
|
|
|
|
|
|
|
|
play_list = results.all()
|
|
|
|
|
|
|
|
|
|
return play_list
|
|
|
|
|
|
|
|
|
|
def get_players_from_play(session: Session, play_id: int) -> list[play_classes.PlayPlayer]:
|
|
|
|
|
statement = select(play_classes.PlayPlayer).where(play_classes.PlayPlayer.play_id == play_id)
|
|
|
|
|
results = session.exec(statement)
|
|
|
|
|
|
|
|
|
|
player_list = results.all()
|
2024-08-11 21:27:59 +02:00
|
|
|
|
2024-08-12 12:08:08 +02:00
|
|
|
return player_list
|
2024-08-11 21:27:59 +02:00
|
|
|
|
|
|
|
|
def delete_database():
|
|
|
|
|
SQLModel.metadata.drop_all(engine)
|
2024-08-11 20:21:54 +02:00
|
|
|
|
2024-08-03 15:42:19 +02:00
|
|
|
|
|
|
|
|
def create_db_and_tables():
|
|
|
|
|
SQLModel.metadata.create_all(engine)
|