Fixed plays not containing expanions
This commit is contained in:
parent
36330749c7
commit
259f82fa8d
7 changed files with 36 additions and 26 deletions
|
|
@ -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()
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ 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
|
||||
|
||||
|
|
|
|||
10
src/main.py
10
src/main.py
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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')),
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
returned_boardgames = results.all()
|
||||
base_boardgames = session.exec(statement).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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue