Made Owned collection work with refactoring
This commit is contained in:
parent
f9ab7bf535
commit
8241635e69
6 changed files with 82 additions and 42 deletions
|
|
@ -45,8 +45,11 @@ class BoardGame(BoardGameBase, table=True):
|
|||
type: BoardgameType = BoardgameType.BOARDGAME
|
||||
#plays: list["Play"] = Relationship(back_populates='boardgame')
|
||||
designers: list["Designer"] = Relationship(back_populates="designed_boardgames", link_model=many_to_many_links.DesignerBoardGameLink)
|
||||
|
||||
expansion_info: Optional["ExpansionInfo"] = Relationship(back_populates="boardgame")
|
||||
|
||||
owned_info: Optional["OwnedInfo"] = Relationship(back_populates="boardgame")
|
||||
|
||||
wishlist_info: Optional["WishlistInfo"] = Relationship(back_populates="boardgame")
|
||||
|
||||
model_config = {
|
||||
|
|
@ -55,15 +58,17 @@ class BoardGame(BoardGameBase, table=True):
|
|||
|
||||
class BoardGamePublic(BoardGameBase):
|
||||
id: int
|
||||
designers: list["Designer"]
|
||||
designers: list["DesignerPublicNoGames"]
|
||||
expansion_info: Optional["ExpansionInfo"]
|
||||
owned_info: Optional["OwnedInfo"]
|
||||
wishlist_info: Optional["WishlistInfo"]
|
||||
|
||||
|
||||
class ExpansionInfo(BoardGameBase, table=True):
|
||||
class ExpansionInfo(SQLModel, table=True):
|
||||
id: Optional[int] = Field(default=None, primary_key=True)
|
||||
boardgame_id: int | None = Field(default=None, foreign_key="boardgame.id")
|
||||
expansion_for: int
|
||||
|
||||
boardgame_id: int = Field(default=None, foreign_key="boardgame.id")
|
||||
boardgame: BoardGame = Relationship(
|
||||
#for one-on-one relationship
|
||||
sa_relationship_kwargs={'uselist': False},
|
||||
|
|
@ -73,25 +78,27 @@ class ExpansionInfo(BoardGameBase, table=True):
|
|||
|
||||
class OwnedInfo(SQLModel, table=True):
|
||||
id: Optional[int] = Field(default=None, primary_key=True)
|
||||
boardgame_id: int | None = Field(default=None, foreign_key="boardgame.id")
|
||||
price_paid: float
|
||||
acquisition_date: date
|
||||
acquired_from: str
|
||||
|
||||
boardgame_id: int = Field(default=None, foreign_key="boardgame.id")
|
||||
boardgame: BoardGame = Relationship(
|
||||
#for one-on-one relationship
|
||||
sa_relationship_kwargs={'uselist': False},
|
||||
back_populates="owned_info"
|
||||
)
|
||||
price_paid: float
|
||||
acquisition_date: date
|
||||
acquired_from: str
|
||||
|
||||
class WishlistInfo(SQLModel, table=True):
|
||||
id: Optional[int] = Field(default=None, primary_key=True)
|
||||
wishlist_priority: int
|
||||
|
||||
boardgame_id: int | None = Field(default=None, foreign_key="boardgame.id")
|
||||
boardgame: BoardGame = Relationship(
|
||||
#for one-on-one relationship
|
||||
sa_relationship_kwargs={'uselist': False},
|
||||
back_populates="wishlist_info"
|
||||
)
|
||||
wishlist_priority: int
|
||||
|
||||
|
||||
# class BoardGamePublic(BoardGameBase):
|
||||
|
|
@ -141,7 +148,7 @@ class WishlistInfo(SQLModel, table=True):
|
|||
|
||||
|
||||
from src.classes.play_classes import Play, PlayPublic
|
||||
from src.classes.people_classes import Designer
|
||||
from src.classes.people_classes import Designer, DesignerPublicNoGames
|
||||
BoardGame.model_rebuild()
|
||||
# BoardGameExpansion.model_rebuild()
|
||||
# BoardGameNoPlays.model_rebuild()
|
||||
|
|
|
|||
|
|
@ -7,3 +7,10 @@ class Designer(SQLModel, table=True):
|
|||
name: str
|
||||
designed_boardgames: list[boardgame_classes.BoardGame] | None = Relationship(back_populates="designers", link_model=many_to_many_links.DesignerBoardGameLink)
|
||||
# designed_expansions: list[boardgame_classes.BoardGameExpansion] | None = Relationship(back_populates="designers", link_model=many_to_many_links.DesignerBoardGameExpansionLink)
|
||||
|
||||
class DesignerPublic(SQLModel):
|
||||
name: str
|
||||
designed_boardgames: list[boardgame_classes.BoardGamePublic]
|
||||
|
||||
class DesignerPublicNoGames(SQLModel):
|
||||
name: str
|
||||
13
src/main.py
13
src/main.py
|
|
@ -8,7 +8,7 @@ from fastapi import FastAPI, Depends
|
|||
from fastapi.middleware.cors import CORSMiddleware
|
||||
from contextlib import asynccontextmanager
|
||||
|
||||
from src.classes import boardgame_classes, play_classes, statistic_classes
|
||||
from src.classes import boardgame_classes, play_classes, statistic_classes, people_classes
|
||||
from src.modules import data_connection, statistic_creator
|
||||
from src.filters import boardgame_filters, play_filters
|
||||
|
||||
|
|
@ -103,7 +103,7 @@ def get_boardgame_by_id(id: int, session: Session = Depends(get_session)):
|
|||
requested_boardgame = data_connection.get_boardgame(session, id)
|
||||
return requested_boardgame
|
||||
|
||||
@app.get("/owned", response_model=list[boardgame_classes.BoardGame])
|
||||
@app.get("/owned", response_model=list[boardgame_classes.BoardGamePublic])
|
||||
def get_owned_collection(query: BoardgameFilterParams = Depends(), session: Session = Depends(get_session)):
|
||||
to_return_boardgames = data_connection.get_user_owned_collection(session)
|
||||
|
||||
|
|
@ -113,7 +113,7 @@ def get_owned_collection(query: BoardgameFilterParams = Depends(), session: Sess
|
|||
|
||||
return to_return_boardgames
|
||||
|
||||
@app.get('/collection', response_model=list[boardgame_classes.BoardGame])
|
||||
@app.get('/collection', response_model=list[boardgame_classes.BoardGamePublic])
|
||||
def get_collection(query: BoardgameFilterParams = Depends(), session: Session = Depends(get_session)):
|
||||
to_return_boardgames = data_connection.get_user_collection(session)
|
||||
|
||||
|
|
@ -123,7 +123,12 @@ def get_collection(query: BoardgameFilterParams = Depends(), session: Session =
|
|||
|
||||
return to_return_boardgames
|
||||
|
||||
@app.get("/wishlist", response_model=list[boardgame_classes.BoardGame])
|
||||
@app.get('/designers', response_model=list[people_classes.DesignerPublic])
|
||||
def get_designers(session: Session = Depends(get_session)):
|
||||
to_return_designers = data_connection.get_designers(session)
|
||||
return to_return_designers
|
||||
|
||||
@app.get("/wishlist", response_model=list[boardgame_classes.BoardGamePublic])
|
||||
def get_wishlist_collection(priority: int = 0, query: BoardgameFilterParams = Depends(), session: Session = Depends(get_session)):
|
||||
|
||||
to_return_boardgames = data_connection.get_user_wishlist_collection(session, priority)
|
||||
|
|
|
|||
|
|
@ -9,10 +9,8 @@ from typing import Union
|
|||
import html
|
||||
from tqdm import tqdm
|
||||
|
||||
from sqlmodel import Session, select
|
||||
|
||||
from src.classes import boardgame_classes, play_classes, people_classes
|
||||
from src.modules import auth_manager, data_connection
|
||||
from src.modules import auth_manager
|
||||
from src.config import definitions
|
||||
|
||||
|
||||
|
|
@ -110,14 +108,15 @@ def convert_xml_to_boardgame(boardgame_xml: ET.Element) -> boardgame_classes.Boa
|
|||
"designers" : designers
|
||||
}
|
||||
|
||||
match boardgame_type:
|
||||
case "boardgame":
|
||||
boardgame = boardgame_classes.BoardGame(**boardgame_dict)
|
||||
case "boardgameexpansion":
|
||||
expansion_for = expansion_ids[0]
|
||||
boardgame_dict['expansion_for'] = expansion_for
|
||||
boardgame = boardgame_classes.BoardGameExpansion(**boardgame_dict)
|
||||
|
||||
if boardgame_type == "boardgameexpansion":
|
||||
expansion_boardgame_dict = {
|
||||
"boardgame_id" : boardgame_dict['id'],
|
||||
"expansion_for" : expansion_ids[0]
|
||||
}
|
||||
expansion_info = boardgame_classes.ExpansionInfo.model_validate(expansion_boardgame_dict)
|
||||
boardgame.expansion_info = expansion_info
|
||||
|
||||
|
||||
return boardgame
|
||||
|
|
@ -143,6 +142,7 @@ def convert_collection_xml_to_owned_boardgame(boardgame_extra_info: boardgame_cl
|
|||
acquired_from = collection_boardgame_xml.find('privateinfo').get('acquiredfrom')
|
||||
|
||||
owned_boardgame_dict = {
|
||||
"boardgame_id" : boardgame_extra_info.id,
|
||||
"price_paid" : price_paid,
|
||||
"acquisition_date" : acquisition_date,
|
||||
"acquired_from" : acquired_from
|
||||
|
|
@ -153,14 +153,19 @@ def convert_collection_xml_to_owned_boardgame(boardgame_extra_info: boardgame_cl
|
|||
**owned_boardgame_dict
|
||||
}
|
||||
|
||||
match boardgame_type:
|
||||
case "boardgame":
|
||||
boardgame = boardgame_classes.OwnedBoardGame(**boardgame_dict)
|
||||
case "boardgameexpansion":
|
||||
boardgame_dict['expansion_for'] = boardgame_extra_info.expansion_for
|
||||
boardgame = boardgame_classes.OwnedBoardGameExpansion(**boardgame_dict)
|
||||
owned_info = boardgame_classes.OwnedInfo.model_validate(owned_boardgame_dict)
|
||||
|
||||
boardgame_extra_info.owned_info = owned_info
|
||||
|
||||
# if boardgame_type == "boardgameexpansion":
|
||||
# expansion_boardgame_dict = {
|
||||
# "boardgame_id" : boardgame_extra_info.id,
|
||||
# "expansion_for" : boardgame_extra_info.expansion_for
|
||||
# }
|
||||
# expansion_info = boardgame_classes.ExpansionInfo.model_validate(expansion_boardgame_dict)
|
||||
# boardgame_extra_info.expansion_info = expansion_info
|
||||
|
||||
boardgame = boardgame_extra_info
|
||||
|
||||
return boardgame
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ from threading import Lock
|
|||
critical_function_lock = Lock()
|
||||
|
||||
from src.modules import bgg_connection, db_connection
|
||||
from src.classes import boardgame_classes, play_classes
|
||||
from src.classes import boardgame_classes, play_classes, people_classes
|
||||
|
||||
def get_db_engine():
|
||||
return db_connection.get_engine()
|
||||
|
|
@ -53,20 +53,17 @@ def get_user_collection(session: Session) -> list[boardgame_classes.BoardGame]:
|
|||
|
||||
return boardgames_from_db # + boardgame_expansions_from_db
|
||||
|
||||
def get_user_owned_collection(session: Session, ) -> list[boardgame_classes.BoardGame]:
|
||||
def get_user_owned_collection(session: Session) -> list[boardgame_classes.BoardGame]:
|
||||
|
||||
owned_boardgames_from_db: list[boardgame_classes.BoardGame] = db_connection.get_all_boardgames(session, boardgame_classes.OwnedBoardGame)
|
||||
owned_boardgame_expanions_from_db: list[boardgame_classes.BoardGame] = db_connection.get_all_boardgames(session, boardgame_classes.BoardGame)
|
||||
owned_boardgames_from_db = db_connection.get_owned_boardgames(session)
|
||||
|
||||
if len(owned_boardgames_from_db) == 0 and len(owned_boardgame_expanions_from_db) == 0:
|
||||
if len(owned_boardgames_from_db) == 0:
|
||||
owned_boardgames = bgg_connection.get_user_owned_collection()
|
||||
db_connection.add_multiple_boardgames(session, owned_boardgames)
|
||||
|
||||
owned_boardgames_from_db: list[boardgame_classes.OwnedBoardGame] = db_connection.get_all_boardgames(session, boardgame_classes.OwnedBoardGame)
|
||||
owned_boardgame_expanions_from_db: list[boardgame_classes.BoardGame] = db_connection.get_all_boardgames(session, boardgame_classes.BoardGame)
|
||||
owned_boardgames_from_db: list[boardgame_classes.BoardGame] = db_connection.get_owned_boardgames(session)
|
||||
|
||||
|
||||
return owned_boardgames_from_db + owned_boardgame_expanions_from_db
|
||||
return owned_boardgames_from_db
|
||||
|
||||
|
||||
|
||||
|
|
@ -126,6 +123,10 @@ def get_players_from_play(session: Session, play_id: int) -> list[play_classes.P
|
|||
|
||||
return players_from_db
|
||||
|
||||
def get_designers(session: Session) -> list[people_classes.Designer]:
|
||||
designers_from_db = db_connection.get_all_designers(session)
|
||||
return designers_from_db
|
||||
|
||||
def delete_database():
|
||||
db_connection.delete_database()
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ sqlite_url = definitions.SQLITE_URL
|
|||
|
||||
|
||||
connect_args = {"check_same_thread": False}
|
||||
engine = create_engine(sqlite_url, echo=True, connect_args=connect_args)
|
||||
engine = create_engine(sqlite_url, echo=False, connect_args=connect_args)
|
||||
|
||||
def get_engine():
|
||||
return engine
|
||||
|
|
@ -45,7 +45,7 @@ def add_multiple_boardgames(session: Session, boardgame_list: list[boardgame_cla
|
|||
if designer_in_db != None:
|
||||
boardgame_list[boardgame_index].designers[designer_index] = designer_in_db
|
||||
|
||||
statement = select(boardgame_list[boardgame_index].__class__).where(boardgame_list[boardgame_index].__class__.id == boardgame_list[boardgame_index].id)
|
||||
statement = select(boardgame_classes.BoardGame).where(boardgame_classes.BoardGame.id == boardgame_list[boardgame_index].id)
|
||||
is_boardgame_present = len(session.exec(statement).all()) != 0
|
||||
|
||||
if not is_boardgame_present:
|
||||
|
|
@ -79,6 +79,12 @@ def get_multiple_designers(session: Session, designer_ids: list[int]) -> list[pe
|
|||
|
||||
return designers, missing_designer_ids
|
||||
|
||||
def get_all_designers(session: Session) -> list[people_classes.Designer]:
|
||||
statement = statement = select(people_classes.Designer)
|
||||
results = session.exec(statement)
|
||||
designers = results.all()
|
||||
return designers
|
||||
|
||||
def get_boardgame(session: Session, boardgame_id: int) -> boardgame_classes.BoardGame:
|
||||
|
||||
statement = select(boardgame_classes.BoardGame).where(boardgame_classes.BoardGame.id == boardgame_id)
|
||||
|
|
@ -99,6 +105,7 @@ def get_boardgame(session: Session, boardgame_id: int) -> boardgame_classes.Boar
|
|||
return boardgame
|
||||
|
||||
def get_multiple_boardgames(session: Session, boardgame_ids: list[int]) -> tuple[list[boardgame_classes.BoardGame], list[int]]:
|
||||
|
||||
statement = select(boardgame_classes.BoardGame).where(boardgame_classes.BoardGame.id.in_(boardgame_ids))
|
||||
results = session.exec(statement)
|
||||
|
||||
|
|
@ -115,6 +122,14 @@ def get_multiple_boardgames(session: Session, boardgame_ids: list[int]) -> tuple
|
|||
|
||||
return boardgames, missing_boardgame_ids
|
||||
|
||||
def get_owned_boardgames(session: Session) -> list[boardgame_classes.BoardGame]:
|
||||
statement = select(boardgame_classes.OwnedInfo)
|
||||
results = session.exec(statement)
|
||||
|
||||
owned_boardgames = [owned_info.boardgame for owned_info in results.all()]
|
||||
|
||||
return owned_boardgames
|
||||
|
||||
def get_all_boardgames(session: Session, boardgame_type: SQLModel) -> list[boardgame_classes.BoardGame]:
|
||||
|
||||
statement = select(boardgame_type)
|
||||
|
|
|
|||
Loading…
Reference in a new issue