110 lines
2.9 KiB
Python
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]
|