55 lines
1.4 KiB
Python
55 lines
1.4 KiB
Python
from typing import List, Optional
|
|
from datetime import datetime
|
|
from pydantic import BaseModel
|
|
|
|
# Base schema with common attributes
|
|
class CardBase(BaseModel):
|
|
name: str
|
|
rarity: Optional[str] = None
|
|
set_name: Optional[str] = None
|
|
price: Optional[float] = None
|
|
quantity: Optional[int] = 0
|
|
|
|
# TCGPlayer specific fields
|
|
tcgplayer_sku: Optional[str] = None
|
|
product_line: Optional[str] = None
|
|
product_name: Optional[str] = None
|
|
title: Optional[str] = None
|
|
number: Optional[str] = None
|
|
condition: Optional[str] = None
|
|
tcg_market_price: Optional[float] = None
|
|
tcg_direct_low: Optional[float] = None
|
|
tcg_low_price_with_shipping: Optional[float] = None
|
|
tcg_low_price: Optional[float] = None
|
|
total_quantity: Optional[int] = None
|
|
add_to_quantity: Optional[int] = None
|
|
tcg_marketplace_price: Optional[float] = None
|
|
photo_url: Optional[str] = None
|
|
|
|
# Schema for creating a new card
|
|
class CardCreate(CardBase):
|
|
pass
|
|
|
|
# Schema for updating a card
|
|
class CardUpdate(CardBase):
|
|
pass
|
|
|
|
# Schema for reading a card (includes id and relationships)
|
|
class CardInDB(CardBase):
|
|
id: int
|
|
created_at: datetime
|
|
updated_at: Optional[datetime] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
# Schema for listing cards
|
|
class CardList(BaseModel):
|
|
cards: List[CardInDB]
|
|
total: int
|
|
page: int
|
|
limit: int
|
|
|
|
# Schema for deleting a card
|
|
class CardDelete(BaseModel):
|
|
message: str |