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):
|
class BoardGameNoPlays(BoardGameBase):
|
||||||
id: int
|
id: int
|
||||||
type: BoardgameType
|
type: BoardgameType = BoardgameType.BOARDGAME
|
||||||
|
|
||||||
class BoardGameExpansion(BoardGameBase, table=True):
|
class BoardGameExpansion(BoardGameBase, table=True):
|
||||||
id: int = Field(primary_key=True)
|
id: int = Field(primary_key=True)
|
||||||
expansion_for: int = Field(default=None, foreign_key="boardgame.id")
|
expansion_for: int = Field(default=None, foreign_key="boardgame.id")
|
||||||
type: BoardgameType = BoardgameType.BOARDGAMEEXPANSION
|
type: BoardgameType = BoardgameType.BOARDGAMEEXPANSION
|
||||||
plays: list["Play"] = Relationship(back_populates='expansion')
|
plays: list["Play"] = Relationship(back_populates='boardgameexpansion')
|
||||||
|
|
||||||
class BoardGameExpansionNoPlays(BoardGameBase):
|
class BoardGameExpansionNoPlays(BoardGameBase):
|
||||||
id: int
|
id: int
|
||||||
expansion_for: int
|
expansion_for: int
|
||||||
type: BoardgameType
|
type: BoardgameType = BoardgameType.BOARDGAMEEXPANSION
|
||||||
|
|
||||||
class OwnedBoardGame(OwnedBoardGameBase, table=True):
|
class OwnedBoardGame(OwnedBoardGameBase, table=True):
|
||||||
id: int = Field(primary_key=True)
|
id: int = Field(primary_key=True)
|
||||||
|
|
@ -81,4 +81,4 @@ class WishlistBoardGameExpansion(WishlistBoardGameBase, table=True):
|
||||||
|
|
||||||
from src.classes.play_classes import Play, PlayPublic
|
from src.classes.play_classes import Play, PlayPublic
|
||||||
BoardGame.model_rebuild()
|
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")
|
players: list[PlayPlayer] = Relationship(back_populates="play")
|
||||||
boardgame: Union["BoardGame", None] = Relationship(back_populates="plays")
|
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 = {
|
model_config = {
|
||||||
'validate_assignment':True
|
'validate_assignment':True
|
||||||
|
|
@ -51,7 +51,7 @@ class PlayPublic(PlayBase):
|
||||||
class PlayPublicWithPlayers(PlayPublic):
|
class PlayPublicWithPlayers(PlayPublic):
|
||||||
players: list[PlayPlayerPublic] = []
|
players: list[PlayPlayerPublic] = []
|
||||||
boardgame: Union["BoardGameNoPlays", None]
|
boardgame: Union["BoardGameNoPlays", None]
|
||||||
expansion: Union["BoardGameExpansionNoPlays", None]
|
boardgameexpansion: Union["BoardGameExpansionNoPlays", None]
|
||||||
|
|
||||||
|
|
||||||
from src.classes.boardgame_classes import BoardGame, BoardGameExpansion, BoardGameNoPlays, BoardGameExpansionNoPlays
|
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]):
|
def filter_out_expansion_plays(play_list: list[play_classes.Play]):
|
||||||
to_return_plays = []
|
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
|
return to_return_plays
|
||||||
|
|
||||||
|
|
|
||||||
10
src/main.py
10
src/main.py
|
|
@ -55,9 +55,9 @@ class ExpansionFilteringParams(BaseModel):
|
||||||
def read_root():
|
def read_root():
|
||||||
return {"Hello": "World"}
|
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)):
|
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
|
return requested_boardgame
|
||||||
|
|
||||||
@app.get("/owned", response_model=list[Union[boardgame_classes.OwnedBoardGame, boardgame_classes.OwnedBoardGameExpansion]])
|
@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 = 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:
|
if boardgame_id > -1:
|
||||||
requested_plays = play_filters.filter_only_specific_boardgame(boardgame_id, requested_plays)
|
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)
|
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 = []
|
all_played_boardgame_ids = []
|
||||||
|
|
||||||
for play in all_plays:
|
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'):
|
for play_player_xml in play_xml.find('players'):
|
||||||
playplayer_list.append(convert_playplayer_xml_to_playplayer(play_player_xml))
|
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 = {
|
play_dict = {
|
||||||
"boardgame_id" : int(play_xml.find('item').get('objectid')),
|
id_key : int(play_xml.find('item').get('objectid')),
|
||||||
"players" : playplayer_list,
|
"players" : playplayer_list,
|
||||||
"play_date" : play_date,
|
"play_date" : play_date,
|
||||||
"duration" : int(play_xml.get('length')),
|
"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:
|
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
|
#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
|
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
|
to_return_boardgame = boardgame_in_db
|
||||||
else:
|
else:
|
||||||
to_return_boardgame = bgg_connection.get_boardgame(boardgame_id)
|
to_return_boardgame = bgg_connection.get_boardgame(boardgame_id)
|
||||||
|
print(type(to_return_boardgame))
|
||||||
db_connection.add_boardgame(session, 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
|
return to_return_boardgame
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -43,28 +43,28 @@ def add_multiple_boardgames(session: Session, boardgame_list: list[Union[
|
||||||
|
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
def get_boardgame(session: Session, boardgame_type: SQLModel, boardgame_id: int) -> Union[
|
def get_boardgame(session: Session, boardgame_id: int) -> Union[
|
||||||
boardgame_classes.BoardGame, boardgame_classes.BoardGameExpansion,
|
boardgame_classes.BoardGame, boardgame_classes.BoardGameExpansion]:
|
||||||
boardgame_classes.OwnedBoardGame, boardgame_classes.OwnedBoardGameExpansion,
|
|
||||||
boardgame_classes.WishlistBoardGame, boardgame_classes.WishlistBoardGameExpansion]:
|
|
||||||
|
|
||||||
statement = select(boardgame_type).where(boardgame_type.id == boardgame_id)
|
statement = select(boardgame_classes.BoardGame)
|
||||||
results = session.exec(statement)
|
|
||||||
|
|
||||||
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:
|
if len(returned_boardgames) == 0:
|
||||||
boardgame = None
|
boardgame = None
|
||||||
else:
|
else:
|
||||||
boardgame = returned_boardgames[0]
|
boardgame = list(filter(lambda boardgame: boardgame.id == boardgame_id, returned_boardgames))[0]
|
||||||
|
|
||||||
print(boardgame)
|
|
||||||
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]) -> Union[
|
||||||
list[boardgame_classes.BoardGame], list[boardgame_classes.BoardGameExpansion],
|
list[boardgame_classes.BoardGame], list[boardgame_classes.BoardGameExpansion]]:
|
||||||
list[boardgame_classes.OwnedBoardGame], list[boardgame_classes.OwnedBoardGameExpansion],
|
|
||||||
list[boardgame_classes.WishlistBoardGame], list[boardgame_classes.WishlistBoardGameExpansion]]:
|
|
||||||
|
|
||||||
statement = select(boardgame_type).where(boardgame_type.id.in_(boardgame_ids))
|
statement = select(boardgame_type).where(boardgame_type.id.in_(boardgame_ids))
|
||||||
results = session.exec(statement)
|
results = session.exec(statement)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue