from datetime import date from enum import Enum from sqlmodel import Field, SQLModel, Relationship from src.classes import many_to_many_links class BoardgameType(Enum): BOARDGAME = 'boardgame' BOARDGAMEEXPANSION = 'boardgameexpansion' OWNEDBOARDGAME = 'ownedboardgame' OWNEDBOARDGAMEEXPANSION = 'ownedboardgameexpansion' WISHLISTBOARDGAME = 'wishlistboardgame' WISHLISTBOARDGAMEEXPANSION = 'wishlistboardgameexpansion' class BoardGameBase(SQLModel): name: str description: str weight: float image_url : str thumbnail_url : str year_published: int min_players: int max_players: int min_playing_time: int max_playing_time: int min_age: int model_config = { 'validate_assignment':True } class OwnedBoardGameBase(BoardGameBase): price_paid: float acquisition_date: date acquired_from: str class WishlistBoardGameBase(BoardGameBase): wishlist_priority: int class BoardGame(BoardGameBase, table=True): id: int = Field(primary_key=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) class BoardGamePublic(BoardGameBase): id: int type: BoardgameType plays: list["Play"] designers: list["Designer"] class BoardGameNoPlays(BoardGameBase): id: int designers: list["Designer"] 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='boardgameexpansion') designers: list["Designer"] = Relationship(back_populates="designed_expansions", link_model=many_to_many_links.DesignerBoardGameExpansionLink) class BoardGameExpansionPublic(BoardGameBase): id: int expansion_for: int type: BoardgameType plays: list["Play"] designers: list["Designer"] class BoardGameExpansionNoPlays(BoardGameBase): id: int expansion_for: int designers: list["Designer"] type: BoardgameType = BoardgameType.BOARDGAMEEXPANSION class OwnedBoardGame(OwnedBoardGameBase, table=True): id: int = Field(primary_key=True) type: BoardgameType = BoardgameType.OWNEDBOARDGAME class OwnedBoardGameExpansion(OwnedBoardGameBase, table=True): id: int = Field(primary_key=True) expansion_for: int = Field(default=None, foreign_key="boardgame.id") type: BoardgameType = BoardgameType.OWNEDBOARDGAMEEXPANSION class WishlistBoardGame(WishlistBoardGameBase, table=True): id: int = Field(primary_key=True) type: BoardgameType = BoardgameType.WISHLISTBOARDGAME class WishlistBoardGameExpansion(WishlistBoardGameBase, table=True): id: int = Field(primary_key=True) expansion_for: int = Field(default=None, foreign_key="boardgame.id") type: BoardgameType = BoardgameType.WISHLISTBOARDGAMEEXPANSION from src.classes.play_classes import Play, PlayPublic from src.classes.people_classes import Designer BoardGame.model_rebuild() BoardGameExpansion.model_rebuild() BoardGameNoPlays.model_rebuild() BoardGameExpansionNoPlays.model_rebuild()