2025-04-09 21:02:43 -04:00

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