ai_giga_tcg/app/schemas/transaction.py
2025-05-05 14:05:12 -04:00

110 lines
2.9 KiB
Python

from typing import List, Optional
from pydantic import BaseModel
from datetime import datetime
from app.models.tcgplayer_products import TCGPlayerProduct
class PurchaseItem(BaseModel):
product_id: int
unit_price: float
quantity: int
item_type: str
num_boxes: Optional[int] = None
# TODO: remove is_case and num_boxes, should derive from product_id
class SaleItem(BaseModel):
inventory_item_id: int
unit_price: float
class PurchaseTransactionCreate(BaseModel):
vendor_id: int
transaction_date: datetime
items: List[PurchaseItem]
transaction_notes: Optional[str] = None
class SaleTransactionCreate(BaseModel):
customer_id: int
marketplace_id: Optional[int] = None
transaction_date: datetime
items: List[SaleItem]
transaction_notes: Optional[str] = None
class TransactionItemResponse(BaseModel):
id: int
transaction_id: int
inventory_item_id: int
unit_price: float
created_at: datetime
updated_at: datetime
deleted_at: Optional[datetime] = None
class TransactionResponse(BaseModel):
id: int
vendor_id: Optional[int] = None
customer_id: Optional[int] = None
marketplace_id: Optional[int] = None
transaction_type: str
transaction_date: datetime
transaction_total_amount: float
transaction_notes: Optional[str] = None
created_at: datetime
updated_at: datetime
deleted_at: Optional[datetime] = None
transaction_items: List[TransactionItemResponse]
class GetAllTransactionsResponse(BaseModel):
total: int
transactions: List[TransactionResponse]
class SealedExpectedValueResponse(BaseModel):
id: int
tcgplayer_product_id: int
expected_value: float
class SealedExpectedValueCreate(BaseModel):
tcgplayer_product_id: int
expected_value: float
class TCGPlayerProductResponse(BaseModel):
id: int
tcgplayer_product_id: int
name: str
image_url: str
category_id: int
group_id: int
url: str
market_price: float
category_name: str
group_name: str
class InventoryItemResponse(BaseModel):
id: int
physical_item_id: int
cost_basis: float
item_type: str
listed_price: Optional[float] = None
marketplace_listing_id: Optional[int] = None
recommended_price: Optional[float] = None
parent_id: Optional[int] = None
created_at: datetime
updated_at: datetime
product: Optional[TCGPlayerProductResponse] = None
class OpenEventResponse(BaseModel):
id: int
source_item_id: int
created_at: datetime
updated_at: datetime
class OpenEventCreate(BaseModel):
inventory_item_id: int
manabox_file_upload_ids: List[int]
class OpenEventResultingItemsResponse(BaseModel):
id: int
source_item_id: int
created_at: datetime
updated_at: datetime
resulting_items: List[InventoryItemResponse]
class OpenEventsForInventoryItemResponse(BaseModel):
open_events: List[OpenEventResponse]