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]