diff --git a/src/modules/data_connection.py b/src/modules/data_connection.py index 038dc68..faa1db7 100644 --- a/src/modules/data_connection.py +++ b/src/modules/data_connection.py @@ -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 diff --git a/src/modules/db_connection.py b/src/modules/db_connection.py index df7e235..3048dcb 100644 --- a/src/modules/db_connection.py +++ b/src/modules/db_connection.py @@ -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],