DB now returns missing boardgame ids when retrieving multiple board games, to more efficiently retrieve them from BGG
This commit is contained in:
parent
1ea7a24694
commit
40980ae89a
2 changed files with 24 additions and 15 deletions
|
|
@ -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]:
|
||||
|
||||
boardgames_in_db = 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)
|
||||
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
|
||||
boardgame_ids_missing += boardgame_expansion_ids_missing
|
||||
|
||||
to_return_boardgames = []
|
||||
if len(boardgame_ids_missing) != 0:
|
||||
missing_boardgames = bgg_connection.get_multiple_boardgames(boardgame_ids_missing)
|
||||
db_connection.add_multiple_boardgames(session, missing_boardgames)
|
||||
|
||||
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)
|
||||
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)
|
||||
|
||||
return to_return_boardgames
|
||||
boardgames_in_db += boardgame_expansions_in_db
|
||||
|
||||
return boardgames_in_db
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -63,15 +63,22 @@ def get_boardgame(session: Session, boardgame_id: int) -> Union[
|
|||
|
||||
return boardgame
|
||||
|
||||
def get_multiple_boardgames(session: Session, boardgame_type: SQLModel, boardgame_ids: list[int]) -> Union[
|
||||
list[boardgame_classes.BoardGame], list[boardgame_classes.BoardGameExpansion]]:
|
||||
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]]:
|
||||
|
||||
statement = select(boardgame_type).where(boardgame_type.id.in_(boardgame_ids))
|
||||
results = session.exec(statement)
|
||||
missing_boardgame_ids = []
|
||||
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[
|
||||
list[boardgame_classes.BoardGame], list[boardgame_classes.BoardGameExpansion],
|
||||
|
|
|
|||
Loading…
Reference in a new issue