bgg_api/src/classes/boardgame_classes.py

64 lines
1.8 KiB
Python
Raw Normal View History

2024-07-25 22:01:25 +02:00
from pydantic import BaseModel, HttpUrl
2024-08-01 11:48:29 +02:00
from datetime import date
2024-08-01 12:05:51 +02:00
from enum import Enum
2024-08-03 14:18:54 +02:00
from sqlmodel import Field, SQLModel, Column, JSON
2024-08-01 12:05:51 +02:00
class BoardgameType(Enum):
2024-08-01 12:16:50 +02:00
BOARDGAME = 'boardgame'
BOARDGAMEEXPANSION = 'boardgameexpansion'
OWNEDBOARDGAME = 'ownedboardgame'
OWNEDBOARDGAMEEXPANSION = 'ownedboardgameexpansion'
2024-08-01 12:16:50 +02:00
WISHLISTBOARDGAME = 'wishlistboardgame'
WISHLISTBOARDGAMEEXPANSION = 'wishlistboardgameexpansion'
2024-08-01 12:05:51 +02:00
class BoardGame(BaseModel):
2024-07-25 22:01:25 +02:00
id: int
name: str
description: str
image_url : HttpUrl
thumbnail_url : HttpUrl
2024-07-25 22:01:25 +02:00
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]
2024-08-01 12:16:50 +02:00
type: BoardgameType = BoardgameType.BOARDGAME
2024-08-03 14:18:54 +02:00
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
2024-07-25 17:27:27 +02:00
class BoardGameExpansion(BoardGame):
2024-08-01 12:16:50 +02:00
type: BoardgameType = BoardgameType.BOARDGAMEEXPANSION
2024-08-01 11:48:29 +02:00
class OwnedBoardGame(BoardGame):
2024-08-01 11:48:29 +02:00
price_paid: float
acquisition_date: date
acquired_from: str
type: BoardgameType = BoardgameType.OWNEDBOARDGAME
2024-08-01 11:48:29 +02:00
class OwnedBoardGameExpansion(OwnedBoardGame):
type: BoardgameType = BoardgameType.OWNEDBOARDGAMEEXPANSION
2024-08-01 11:48:29 +02:00
class WishlistBoardGame(BoardGame):
2024-08-01 12:16:50 +02:00
wishlist_priority: int
type: BoardgameType = BoardgameType.WISHLISTBOARDGAME
class WishlistBoardGameExpansion(WishlistBoardGame):
type: BoardgameType = BoardgameType.WISHLISTBOARDGAMEEXPANSION