DB now returns missing boardgame ids when retrieving multiple board games, to more efficiently retrieve them from BGG

This commit is contained in:
Yarne Coppens 2024-08-14 10:02:25 +02:00
parent 1ea7a24694
commit 40980ae89a
2 changed files with 24 additions and 15 deletions

View file

@ -26,20 +26,22 @@ def get_boardgame(session: Session, boardgame_id: int) -> boardgame_classes.Boar
def get_multiple_boardgames(session: Session, boardgame_ids: list[int]) -> list[boardgame_classes.BoardGame]: def get_multiple_boardgames(session: Session, boardgame_ids: list[int]) -> list[boardgame_classes.BoardGame]:
boardgames_in_db = db_connection.get_multiple_boardgames(session, boardgame_classes.BoardGame, boardgame_ids=boardgame_ids) boardgames_in_db, boardgame_ids_missing = db_connection.get_multiple_boardgames(session, boardgame_classes.BoardGame, boardgame_ids=boardgame_ids)
boardgame_expansions_in_db = db_connection.get_multiple_boardgames(session, boardgame_classes.BoardGameExpansion, boardgame_ids=boardgame_ids) boardgame_expansions_in_db, boardgame_expansion_ids_missing = db_connection.get_multiple_boardgames(session, boardgame_classes.BoardGameExpansion, boardgame_ids=boardgame_ids)
boardgames_in_db += boardgame_expansions_in_db
boardgame_ids_missing += boardgame_expansion_ids_missing
if len(boardgame_ids_missing) != 0:
missing_boardgames = bgg_connection.get_multiple_boardgames(boardgame_ids_missing)
db_connection.add_multiple_boardgames(session, missing_boardgames)
boardgames_in_db, boardgame_ids_missing = db_connection.get_multiple_boardgames(session, boardgame_classes.BoardGame, boardgame_ids=boardgame_ids)
boardgame_expansions_in_db, boardgame_expansion_ids_missing = db_connection.get_multiple_boardgames(session, boardgame_classes.BoardGameExpansion, boardgame_ids=boardgame_ids)
boardgames_in_db += boardgame_expansions_in_db boardgames_in_db += boardgame_expansions_in_db
to_return_boardgames = [] return boardgames_in_db
if len(boardgames_in_db) != 0:
to_return_boardgames = boardgames_in_db
else:
to_return_boardgames = bgg_connection.get_multiple_boardgames(boardgame_ids)
db_connection.add_multiple_boardgames(session, to_return_boardgames)
return to_return_boardgames

View file

@ -63,15 +63,22 @@ def get_boardgame(session: Session, boardgame_id: int) -> Union[
return boardgame return boardgame
def get_multiple_boardgames(session: Session, boardgame_type: SQLModel, boardgame_ids: list[int]) -> Union[ def get_multiple_boardgames(session: Session, boardgame_type: SQLModel, boardgame_ids: list[int]) -> tuple[Union[
list[boardgame_classes.BoardGame], list[boardgame_classes.BoardGameExpansion]]: list[boardgame_classes.BoardGame], list[boardgame_classes.BoardGameExpansion]], list[int]]:
statement = select(boardgame_type).where(boardgame_type.id.in_(boardgame_ids)) missing_boardgame_ids = []
results = session.exec(statement) to_return_boardgames = []
boardgames = results.all()
return boardgames for boardgame_id in boardgame_ids:
statement = select(boardgame_type).where(boardgame_type.id == boardgame_id)
results = session.exec(statement).all()
if len(results) == 0:
missing_boardgame_ids.append(boardgame_id)
else:
to_return_boardgames.append(results[0])
return to_return_boardgames, missing_boardgame_ids
def get_all_boardgames(session: Session, boardgame_type: SQLModel) -> Union[ def get_all_boardgames(session: Session, boardgame_type: SQLModel) -> Union[
list[boardgame_classes.BoardGame], list[boardgame_classes.BoardGameExpansion], list[boardgame_classes.BoardGame], list[boardgame_classes.BoardGameExpansion],