from pydantic import BaseModel, HttpUrl from datetime import date from enum import Enum from sqlmodel import Field, SQLModel, Column, JSON class BoardgameType(Enum): BOARDGAME = 'boardgame' BOARDGAMEEXPANSION = 'boardgameexpansion' OWNEDBOARDGAME = 'ownedboardgame' OWNEDBOARDGAMEEXPANSION = 'ownedboardgameexpansion' WISHLISTBOARDGAME = 'wishlistboardgame' WISHLISTBOARDGAMEEXPANSION = 'wishlistboardgameexpansion' class BoardGame(BaseModel): id: int name: str description: str image_url : HttpUrl thumbnail_url : HttpUrl year_published: int min_players: int max_players: int min_playing_time: int max_playing_time: int min_age: int all_expansion_ids: list[int] type: BoardgameType = BoardgameType.BOARDGAME class BoardGameTable(SQLModel, table=True): id: int = Field(primary_key=True) name: str description: str 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 all_expansion_ids: list[int] = Field(sa_column=Column(JSON)) type: BoardgameType = BoardgameType.BOARDGAME class BoardGameExpansion(BoardGame): type: BoardgameType = BoardgameType.BOARDGAMEEXPANSION class OwnedBoardGame(BoardGame): price_paid: float acquisition_date: date acquired_from: str type: BoardgameType = BoardgameType.OWNEDBOARDGAME class OwnedBoardGameExpansion(OwnedBoardGame): type: BoardgameType = BoardgameType.OWNEDBOARDGAMEEXPANSION class WishlistBoardGame(BoardGame): wishlist_priority: int type: BoardgameType = BoardgameType.WISHLISTBOARDGAME class WishlistBoardGameExpansion(WishlistBoardGame): type: BoardgameType = BoardgameType.WISHLISTBOARDGAMEEXPANSION