Fixed plays not containing expanions

This commit is contained in:
Yarne Coppens 2024-08-13 10:35:25 +02:00
parent 36330749c7
commit 259f82fa8d
7 changed files with 36 additions and 26 deletions

View file

@ -45,18 +45,18 @@ class BoardGame(BoardGameBase, table=True):
class BoardGameNoPlays(BoardGameBase):
id: int
type: BoardgameType
type: BoardgameType = BoardgameType.BOARDGAME
class BoardGameExpansion(BoardGameBase, table=True):
id: int = Field(primary_key=True)
expansion_for: int = Field(default=None, foreign_key="boardgame.id")
type: BoardgameType = BoardgameType.BOARDGAMEEXPANSION
plays: list["Play"] = Relationship(back_populates='expansion')
plays: list["Play"] = Relationship(back_populates='boardgameexpansion')
class BoardGameExpansionNoPlays(BoardGameBase):
id: int
expansion_for: int
type: BoardgameType
type: BoardgameType = BoardgameType.BOARDGAMEEXPANSION
class OwnedBoardGame(OwnedBoardGameBase, table=True):
id: int = Field(primary_key=True)
@ -81,4 +81,4 @@ class WishlistBoardGameExpansion(WishlistBoardGameBase, table=True):
from src.classes.play_classes import Play, PlayPublic
BoardGame.model_rebuild()
BoardGameNoPlays.model_rebuild()
BoardGameExpansion.model_rebuild()

View file

@ -38,7 +38,7 @@ class Play(PlayBase, table=True):
players: list[PlayPlayer] = Relationship(back_populates="play")
boardgame: Union["BoardGame", None] = Relationship(back_populates="plays")
expansion: Union["BoardGameExpansion", None] = Relationship(back_populates="plays")
boardgameexpansion: Union["BoardGameExpansion", None] = Relationship(back_populates="plays")
model_config = {
'validate_assignment':True
@ -51,7 +51,7 @@ class PlayPublic(PlayBase):
class PlayPublicWithPlayers(PlayPublic):
players: list[PlayPlayerPublic] = []
boardgame: Union["BoardGameNoPlays", None]
expansion: Union["BoardGameExpansionNoPlays", None]
boardgameexpansion: Union["BoardGameExpansionNoPlays", None]
from src.classes.boardgame_classes import BoardGame, BoardGameExpansion, BoardGameNoPlays, BoardGameExpansionNoPlays

View file

@ -2,8 +2,8 @@ from src.classes import play_classes, boardgame_classes
def filter_out_expansion_plays(play_list: list[play_classes.Play]):
to_return_plays = []
to_return_plays = list(filter(lambda x: x.expansion == None, play_list))
to_return_plays = list(filter(lambda x: x.expansion_id == None, play_list))
return to_return_plays

View file

@ -55,9 +55,9 @@ class ExpansionFilteringParams(BaseModel):
def read_root():
return {"Hello": "World"}
@app.get("/boardgame", response_model=boardgame_classes.BoardGame)
@app.get("/boardgame", response_model=Union[boardgame_classes.BoardGame, boardgame_classes.BoardGameExpansion])
def get_boardgame_by_id(id: int, session: Session = Depends(get_db_session)):
requested_boardgame: boardgame_classes.BoardGame = data_connection.get_boardgame(session, boardgame_classes.BoardGame, id)
requested_boardgame: Union[boardgame_classes.BoardGame, boardgame_classes.BoardGameExpansion] = data_connection.get_boardgame(session, boardgame_classes.BoardGame, id)
return requested_boardgame
@app.get("/owned", response_model=list[Union[boardgame_classes.OwnedBoardGame, boardgame_classes.OwnedBoardGameExpansion]])
@ -83,7 +83,7 @@ def get_plays(boardgame_id: int = -1, session: Session = Depends(get_db_session)
requested_plays = data_connection.get_plays(session)
requested_plays = play_filters.filter_out_expansion_plays(requested_plays)
#requested_plays = play_filters.filter_out_expansion_plays(requested_plays)
if boardgame_id > -1:
requested_plays = play_filters.filter_only_specific_boardgame(boardgame_id, requested_plays)
@ -150,6 +150,10 @@ def get_amount_of_games_played_per_year(query: ExpansionFilteringParams = Depend
all_plays.sort(key= lambda x: x.play_date)
if query.filter_expansions_out:
all_plays = play_filters.filter_out_expansion_plays(all_plays)
all_played_boardgame_ids = []
for play in all_plays:

View file

@ -199,8 +199,13 @@ def convert_play_xml_to_play(play_xml: ET.Element) -> play_classes.Play:
for play_player_xml in play_xml.find('players'):
playplayer_list.append(convert_playplayer_xml_to_playplayer(play_player_xml))
id_key = "boardgame_id"
for subtype in play_xml.find('item').find('subtypes'):
if subtype.get('value') == 'boardgameexpansion':
id_key = "expansion_id"
play_dict = {
"boardgame_id" : int(play_xml.find('item').get('objectid')),
id_key : int(play_xml.find('item').get('objectid')),
"players" : playplayer_list,
"play_date" : play_date,
"duration" : int(play_xml.get('length')),

View file

@ -10,7 +10,7 @@ def get_db_session():
def get_boardgame(session: Session, boardgame_type: SQLModel, boardgame_id: int) -> boardgame_classes.BoardGame:
#Will check if it already exists in db, then it will get it from there
boardgame_in_db = db_connection.get_boardgame(session, boardgame_type, boardgame_id=boardgame_id)
boardgame_in_db = db_connection.get_boardgame(session, boardgame_id=boardgame_id)
to_return_boardgame = None
@ -18,8 +18,9 @@ def get_boardgame(session: Session, boardgame_type: SQLModel, boardgame_id: int)
to_return_boardgame = boardgame_in_db
else:
to_return_boardgame = bgg_connection.get_boardgame(boardgame_id)
print(type(to_return_boardgame))
db_connection.add_boardgame(session, to_return_boardgame)
to_return_boardgame = db_connection.get_boardgame(session, boardgame_type, boardgame_id)
to_return_boardgame = db_connection.get_boardgame(session, boardgame_id)
return to_return_boardgame

View file

@ -43,28 +43,28 @@ def add_multiple_boardgames(session: Session, boardgame_list: list[Union[
session.commit()
def get_boardgame(session: Session, boardgame_type: SQLModel, boardgame_id: int) -> Union[
boardgame_classes.BoardGame, boardgame_classes.BoardGameExpansion,
boardgame_classes.OwnedBoardGame, boardgame_classes.OwnedBoardGameExpansion,
boardgame_classes.WishlistBoardGame, boardgame_classes.WishlistBoardGameExpansion]:
def get_boardgame(session: Session, boardgame_id: int) -> Union[
boardgame_classes.BoardGame, boardgame_classes.BoardGameExpansion]:
statement = select(boardgame_type).where(boardgame_type.id == boardgame_id)
results = session.exec(statement)
statement = select(boardgame_classes.BoardGame)
base_boardgames = session.exec(statement).all()
returned_boardgames = results.all()
statement = select(boardgame_classes.BoardGameExpansion)
expansion_boardgames = session.exec(statement).all()
returned_boardgames = base_boardgames + expansion_boardgames
if len(returned_boardgames) == 0:
boardgame = None
else:
boardgame = returned_boardgames[0]
boardgame = list(filter(lambda boardgame: boardgame.id == boardgame_id, returned_boardgames))[0]
print(boardgame)
return boardgame
def get_multiple_boardgames(session: Session, boardgame_type: SQLModel, boardgame_ids: list[int]) -> 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]]:
list[boardgame_classes.BoardGame], list[boardgame_classes.BoardGameExpansion]]:
statement = select(boardgame_type).where(boardgame_type.id.in_(boardgame_ids))
results = session.exec(statement)