72 lines
1.5 KiB
Python
72 lines
1.5 KiB
Python
from typing import List, Optional
|
|
from datetime import datetime
|
|
from pydantic import BaseModel
|
|
|
|
# Base schema with common attributes
|
|
class BoxBase(BaseModel):
|
|
name: str
|
|
description: Optional[str] = None
|
|
game_id: int
|
|
set_id: Optional[int] = None
|
|
price: Optional[float] = None
|
|
quantity: Optional[int] = 0
|
|
status: Optional[str] = "available" # available, sold, reserved
|
|
|
|
# Schema for creating a new box
|
|
class BoxCreate(BoxBase):
|
|
pass
|
|
|
|
# Schema for updating a box
|
|
class BoxUpdate(BoxBase):
|
|
pass
|
|
|
|
# Schema for reading a box
|
|
class BoxInDB(BoxBase):
|
|
id: int
|
|
created_at: datetime
|
|
updated_at: Optional[datetime] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
# Schema for deleting a box
|
|
class BoxDelete(BaseModel):
|
|
message: str
|
|
|
|
# Schema for listing boxes
|
|
class BoxList(BaseModel):
|
|
boxes: List[BoxInDB]
|
|
total: int
|
|
page: int
|
|
limit: int
|
|
|
|
# OpenBox schemas
|
|
class OpenBoxBase(BaseModel):
|
|
box_id: int
|
|
opened_at: Optional[datetime] = None
|
|
opened_by: Optional[str] = None
|
|
contents: Optional[List[dict]] = None
|
|
status: Optional[str] = "pending" # pending, opened, verified, listed
|
|
|
|
class OpenBoxCreate(OpenBoxBase):
|
|
pass
|
|
|
|
class OpenBoxUpdate(OpenBoxBase):
|
|
pass
|
|
|
|
class OpenBoxInDB(OpenBoxBase):
|
|
id: int
|
|
created_at: datetime
|
|
updated_at: Optional[datetime] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
class OpenBoxDelete(BaseModel):
|
|
message: str
|
|
|
|
class OpenBoxList(BaseModel):
|
|
open_boxes: List[OpenBoxInDB]
|
|
total: int
|
|
page: int
|
|
limit: int |