81 lines
1.7 KiB
Python
81 lines
1.7 KiB
Python
from pydantic import BaseModel, ConfigDict
|
|
from typing import Optional, List
|
|
from datetime import datetime
|
|
|
|
# Base schema with common attributes
|
|
class BoxBase(BaseModel):
|
|
product_id: int
|
|
type: str
|
|
set_code: str
|
|
sku: int
|
|
name: str
|
|
expected_number_of_cards: int
|
|
description: str
|
|
image_url: str
|
|
|
|
# Schema for creating a new box
|
|
class BoxCreate(BoxBase):
|
|
pass
|
|
|
|
# Schema for updating a box
|
|
class BoxUpdate(BaseModel):
|
|
product_id: Optional[int] = None
|
|
type: Optional[str] = None
|
|
set_code: Optional[str] = None
|
|
sku: Optional[int] = None
|
|
name: Optional[str] = None
|
|
expected_number_of_cards: Optional[int] = None
|
|
description: Optional[str] = None
|
|
image_url: Optional[str] = None
|
|
|
|
# Schema for reading a box
|
|
class Box(BoxBase):
|
|
id: int
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
cards: List["Card"] = []
|
|
open_boxes: List["OpenBox"] = []
|
|
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
# Schema for deleting a box
|
|
class BoxDelete(BaseModel):
|
|
id: int
|
|
|
|
# Schema for listing boxes
|
|
class BoxList(BaseModel):
|
|
boxes: List[Box]
|
|
total: int
|
|
page: int
|
|
limit: int
|
|
|
|
# OpenBox schemas
|
|
class OpenBoxBase(BaseModel):
|
|
box_id: int
|
|
number_of_cards: int
|
|
date_opened: datetime
|
|
|
|
class OpenBoxCreate(OpenBoxBase):
|
|
pass
|
|
|
|
class OpenBoxUpdate(BaseModel):
|
|
number_of_cards: Optional[int] = None
|
|
date_opened: Optional[datetime] = None
|
|
|
|
class OpenBox(OpenBoxBase):
|
|
id: int
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
box: Optional[Box] = None
|
|
cards: List["Card"] = []
|
|
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
class OpenBoxDelete(BaseModel):
|
|
id: int
|
|
|
|
class OpenBoxList(BaseModel):
|
|
open_boxes: List[OpenBox]
|
|
total: int
|
|
page: int
|
|
limit: int |