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
|
type: BoardgameType = BoardgameType.BOARDGAME
|
||||||
#plays: list["Play"] = Relationship(back_populates='boardgame')
|
#plays: list["Play"] = Relationship(back_populates='boardgame')
|
||||||
designers: list["Designer"] = Relationship(back_populates="designed_boardgames", link_model=many_to_many_links.DesignerBoardGameLink)
|
designers: list["Designer"] = Relationship(back_populates="designed_boardgames", link_model=many_to_many_links.DesignerBoardGameLink)
|
||||||
|
|
||||||
expansion_info: Optional["ExpansionInfo"] = Relationship(back_populates="boardgame")
|
expansion_info: Optional["ExpansionInfo"] = Relationship(back_populates="boardgame")
|
||||||
|
|
||||||
owned_info: Optional["OwnedInfo"] = Relationship(back_populates="boardgame")
|
owned_info: Optional["OwnedInfo"] = Relationship(back_populates="boardgame")
|
||||||
|
|
||||||
wishlist_info: Optional["WishlistInfo"] = Relationship(back_populates="boardgame")
|
wishlist_info: Optional["WishlistInfo"] = Relationship(back_populates="boardgame")
|
||||||
|
|
||||||
model_config = {
|
model_config = {
|
||||||
|
|
@ -55,15 +58,17 @@ class BoardGame(BoardGameBase, table=True):
|
||||||
|
|
||||||
class BoardGamePublic(BoardGameBase):
|
class BoardGamePublic(BoardGameBase):
|
||||||
id: int
|
id: int
|
||||||
designers: list["Designer"]
|
designers: list["DesignerPublicNoGames"]
|
||||||
expansion_info: Optional["ExpansionInfo"]
|
expansion_info: Optional["ExpansionInfo"]
|
||||||
owned_info: Optional["OwnedInfo"]
|
owned_info: Optional["OwnedInfo"]
|
||||||
wishlist_info: Optional["WishlistInfo"]
|
wishlist_info: Optional["WishlistInfo"]
|
||||||
|
|
||||||
|
|
||||||
class ExpansionInfo(BoardGameBase, table=True):
|
class ExpansionInfo(SQLModel, table=True):
|
||||||
id: Optional[int] = Field(default=None, primary_key=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(
|
boardgame: BoardGame = Relationship(
|
||||||
#for one-on-one relationship
|
#for one-on-one relationship
|
||||||
sa_relationship_kwargs={'uselist': False},
|
sa_relationship_kwargs={'uselist': False},
|
||||||
|
|
@ -73,25 +78,27 @@ class ExpansionInfo(BoardGameBase, table=True):
|
||||||
|
|
||||||
class OwnedInfo(SQLModel, table=True):
|
class OwnedInfo(SQLModel, table=True):
|
||||||
id: Optional[int] = Field(default=None, primary_key=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(
|
boardgame: BoardGame = Relationship(
|
||||||
#for one-on-one relationship
|
#for one-on-one relationship
|
||||||
sa_relationship_kwargs={'uselist': False},
|
sa_relationship_kwargs={'uselist': False},
|
||||||
back_populates="owned_info"
|
back_populates="owned_info"
|
||||||
)
|
)
|
||||||
price_paid: float
|
|
||||||
acquisition_date: date
|
|
||||||
acquired_from: str
|
|
||||||
|
|
||||||
class WishlistInfo(SQLModel, table=True):
|
class WishlistInfo(SQLModel, table=True):
|
||||||
id: Optional[int] = Field(default=None, primary_key=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_id: int | None = Field(default=None, foreign_key="boardgame.id")
|
||||||
boardgame: BoardGame = Relationship(
|
boardgame: BoardGame = Relationship(
|
||||||
#for one-on-one relationship
|
#for one-on-one relationship
|
||||||
sa_relationship_kwargs={'uselist': False},
|
sa_relationship_kwargs={'uselist': False},
|
||||||
back_populates="wishlist_info"
|
back_populates="wishlist_info"
|
||||||
)
|
)
|
||||||
wishlist_priority: int
|
|
||||||
|
|
||||||
|
|
||||||
# class BoardGamePublic(BoardGameBase):
|
# class BoardGamePublic(BoardGameBase):
|
||||||
|
|
@ -141,7 +148,7 @@ class WishlistInfo(SQLModel, table=True):
|
||||||
|
|
||||||
|
|
||||||
from src.classes.play_classes import Play, PlayPublic
|
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()
|
BoardGame.model_rebuild()
|
||||||
# BoardGameExpansion.model_rebuild()
|
# BoardGameExpansion.model_rebuild()
|
||||||
# BoardGameNoPlays.model_rebuild()
|
# BoardGameNoPlays.model_rebuild()
|
||||||
|
|
|
||||||
|
|
@ -6,4 +6,11 @@ class Designer(SQLModel, table=True):
|
||||||
id: int = Field(primary_key=True)
|
id: int = Field(primary_key=True)
|
||||||
name: str
|
name: str
|
||||||
designed_boardgames: list[boardgame_classes.BoardGame] | None = Relationship(back_populates="designers", link_model=many_to_many_links.DesignerBoardGameLink)
|
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)
|
# 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 fastapi.middleware.cors import CORSMiddleware
|
||||||
from contextlib import asynccontextmanager
|
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.modules import data_connection, statistic_creator
|
||||||
from src.filters import boardgame_filters, play_filters
|
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)
|
requested_boardgame = data_connection.get_boardgame(session, id)
|
||||||
return requested_boardgame
|
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)):
|
def get_owned_collection(query: BoardgameFilterParams = Depends(), session: Session = Depends(get_session)):
|
||||||
to_return_boardgames = data_connection.get_user_owned_collection(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
|
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)):
|
def get_collection(query: BoardgameFilterParams = Depends(), session: Session = Depends(get_session)):
|
||||||
to_return_boardgames = data_connection.get_user_collection(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
|
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)):
|
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)
|
to_return_boardgames = data_connection.get_user_wishlist_collection(session, priority)
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,8 @@ from typing import Union
|
||||||
import html
|
import html
|
||||||
from tqdm import tqdm
|
from tqdm import tqdm
|
||||||
|
|
||||||
from sqlmodel import Session, select
|
|
||||||
|
|
||||||
from src.classes import boardgame_classes, play_classes, people_classes
|
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
|
from src.config import definitions
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -110,14 +108,15 @@ def convert_xml_to_boardgame(boardgame_xml: ET.Element) -> boardgame_classes.Boa
|
||||||
"designers" : designers
|
"designers" : designers
|
||||||
}
|
}
|
||||||
|
|
||||||
match boardgame_type:
|
boardgame = boardgame_classes.BoardGame(**boardgame_dict)
|
||||||
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
|
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')
|
acquired_from = collection_boardgame_xml.find('privateinfo').get('acquiredfrom')
|
||||||
|
|
||||||
owned_boardgame_dict = {
|
owned_boardgame_dict = {
|
||||||
|
"boardgame_id" : boardgame_extra_info.id,
|
||||||
"price_paid" : price_paid,
|
"price_paid" : price_paid,
|
||||||
"acquisition_date" : acquisition_date,
|
"acquisition_date" : acquisition_date,
|
||||||
"acquired_from" : acquired_from
|
"acquired_from" : acquired_from
|
||||||
|
|
@ -153,14 +153,19 @@ def convert_collection_xml_to_owned_boardgame(boardgame_extra_info: boardgame_cl
|
||||||
**owned_boardgame_dict
|
**owned_boardgame_dict
|
||||||
}
|
}
|
||||||
|
|
||||||
match boardgame_type:
|
owned_info = boardgame_classes.OwnedInfo.model_validate(owned_boardgame_dict)
|
||||||
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)
|
|
||||||
|
|
||||||
|
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
|
return boardgame
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ from threading import Lock
|
||||||
critical_function_lock = Lock()
|
critical_function_lock = Lock()
|
||||||
|
|
||||||
from src.modules import bgg_connection, db_connection
|
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():
|
def get_db_engine():
|
||||||
return db_connection.get_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
|
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_boardgames_from_db = db_connection.get_owned_boardgames(session)
|
||||||
owned_boardgame_expanions_from_db: list[boardgame_classes.BoardGame] = db_connection.get_all_boardgames(session, boardgame_classes.BoardGame)
|
|
||||||
|
|
||||||
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()
|
owned_boardgames = bgg_connection.get_user_owned_collection()
|
||||||
db_connection.add_multiple_boardgames(session, owned_boardgames)
|
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_boardgames_from_db: list[boardgame_classes.BoardGame] = db_connection.get_owned_boardgames(session)
|
||||||
owned_boardgame_expanions_from_db: list[boardgame_classes.BoardGame] = db_connection.get_all_boardgames(session, boardgame_classes.BoardGame)
|
|
||||||
|
|
||||||
|
return owned_boardgames_from_db
|
||||||
return owned_boardgames_from_db + owned_boardgame_expanions_from_db
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -126,6 +123,10 @@ def get_players_from_play(session: Session, play_id: int) -> list[play_classes.P
|
||||||
|
|
||||||
return players_from_db
|
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():
|
def delete_database():
|
||||||
db_connection.delete_database()
|
db_connection.delete_database()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ sqlite_url = definitions.SQLITE_URL
|
||||||
|
|
||||||
|
|
||||||
connect_args = {"check_same_thread": False}
|
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():
|
def get_engine():
|
||||||
return engine
|
return engine
|
||||||
|
|
@ -45,7 +45,7 @@ def add_multiple_boardgames(session: Session, boardgame_list: list[boardgame_cla
|
||||||
if designer_in_db != None:
|
if designer_in_db != None:
|
||||||
boardgame_list[boardgame_index].designers[designer_index] = designer_in_db
|
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
|
is_boardgame_present = len(session.exec(statement).all()) != 0
|
||||||
|
|
||||||
if not is_boardgame_present:
|
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
|
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:
|
def get_boardgame(session: Session, boardgame_id: int) -> boardgame_classes.BoardGame:
|
||||||
|
|
||||||
statement = select(boardgame_classes.BoardGame).where(boardgame_classes.BoardGame.id == boardgame_id)
|
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
|
return boardgame
|
||||||
|
|
||||||
def get_multiple_boardgames(session: Session, boardgame_ids: list[int]) -> tuple[list[boardgame_classes.BoardGame], list[int]]:
|
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))
|
statement = select(boardgame_classes.BoardGame).where(boardgame_classes.BoardGame.id.in_(boardgame_ids))
|
||||||
results = session.exec(statement)
|
results = session.exec(statement)
|
||||||
|
|
||||||
|
|
@ -115,6 +122,14 @@ def get_multiple_boardgames(session: Session, boardgame_ids: list[int]) -> tuple
|
||||||
|
|
||||||
return boardgames, missing_boardgame_ids
|
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]:
|
def get_all_boardgames(session: Session, boardgame_type: SQLModel) -> list[boardgame_classes.BoardGame]:
|
||||||
|
|
||||||
statement = select(boardgame_type)
|
statement = select(boardgame_type)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue