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]:
|
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
|
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:
|
boardgames_in_db, boardgame_ids_missing = db_connection.get_multiple_boardgames(session, boardgame_classes.BoardGame, boardgame_ids=boardgame_ids)
|
||||||
to_return_boardgames = boardgames_in_db
|
boardgame_expansions_in_db, boardgame_expansion_ids_missing = db_connection.get_multiple_boardgames(session, boardgame_classes.BoardGameExpansion, boardgame_ids=boardgame_ids)
|
||||||
else:
|
|
||||||
to_return_boardgames = bgg_connection.get_multiple_boardgames(boardgame_ids)
|
|
||||||
db_connection.add_multiple_boardgames(session, to_return_boardgames)
|
|
||||||
|
|
||||||
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
|
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],
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue