ai_giga_tcg/app/schemas/tcgplayer.py
2025-04-17 00:09:16 -04:00

182 lines
4.2 KiB
Python

from datetime import datetime
from typing import Optional, List
from pydantic import BaseModel, Field
# API Response Schemas (matching TCGPlayer API structure)
class TCGPlayerAPIOrderProduct(BaseModel):
name: str
unitPrice: float
extendedPrice: float
quantity: int
url: str
productId: str
skuId: str
class TCGPlayerAPIOrderTax(BaseModel):
code: str
amount: float
class TCGPlayerAPIOrderTransaction(BaseModel):
productAmount: float
shippingAmount: float
grossAmount: float
feeAmount: float
netAmount: float
directFeeAmount: float
taxes: List[TCGPlayerAPIOrderTax]
class TCGPlayerAPIOrderRefund(BaseModel):
createdAt: datetime
type: str
amount: float
description: Optional[str] = None
origin: str
shippingAmount: float
products: List[dict]
class TCGPlayerAPIOrderShippingAddress(BaseModel):
recipientName: str
addressOne: str
addressTwo: Optional[str] = None
city: str
territory: str
country: str
postalCode: str
class TCGPlayerAPIOrderTrackingNumber(BaseModel):
createdAt: str
carrier: str
trackingNumber: str
status: str
class TCGPlayerAPIOrder(BaseModel):
createdAt: str
status: str
orderChannel: str
orderFulfillment: str
orderNumber: str
sellerName: str
buyerName: str
paymentType: str
pickupStatus: str
shippingType: str
estimatedDeliveryDate: datetime
transaction: TCGPlayerAPIOrderTransaction
shippingAddress: TCGPlayerAPIOrderShippingAddress
products: List[TCGPlayerAPIOrderProduct]
refunds: Optional[List[TCGPlayerAPIOrderRefund]]
refundStatus: str
trackingNumbers: List[TCGPlayerAPIOrderTrackingNumber]
allowedActions: List[str]
class TCGPlayerAPIOrderSummary(BaseModel):
orderNumber: str
orderDate: datetime
orderChannel: str
orderStatus: str
buyerName: str
shippingType: str
productAmount: float
shippingAmount: float
totalAmount: float
buyerPaid: bool
orderFulfillment: str
class TCGPlayerAPIOrderSearchResponse(BaseModel):
totalOrders: int
orders: List[TCGPlayerAPIOrderSummary]
# Database Schemas (matching your internal structure)
class TCGPlayerOrderBase(BaseModel):
order_number: str
order_created_at: datetime
status: str
channel: str
fulfillment: str
seller_name: str
buyer_name: str
payment_type: str
pickup_status: str
shipping_type: str
estimated_delivery_date: Optional[datetime]
recipient_name: str
address_line_1: str
address_line_2: Optional[str]
city: str
state: str
zip_code: str
country: str
tracking_numbers: List[str]
class TCGPlayerOrderCreate(TCGPlayerOrderBase):
pass
class TCGPlayerOrder(TCGPlayerOrderBase):
id: int
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
class TCGPlayerOrderTransactionBase(BaseModel):
order_number: str
product_amount: float
shipping_amount: float
gross_amount: float
fee_amount: float
net_amount: float
direct_fee_amount: float
taxes: List[dict]
class TCGPlayerOrderTransactionCreate(TCGPlayerOrderTransactionBase):
pass
class TCGPlayerOrderTransaction(TCGPlayerOrderTransactionBase):
id: int
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
class TCGPlayerOrderProductBase(BaseModel):
order_number: str
product_name: str
unit_price: float
extended_price: float
quantity: int
url: str
product_id: str
sku_id: str
class TCGPlayerOrderProductCreate(TCGPlayerOrderProductBase):
pass
class TCGPlayerOrderProduct(TCGPlayerOrderProductBase):
id: int
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
class TCGPlayerOrderRefundBase(BaseModel):
order_number: str
refund_created_at: datetime
type: str
amount: float
description: Optional[str] = None
origin: str
shipping_amount: float
products: List[dict]
class TCGPlayerOrderRefundCreate(TCGPlayerOrderRefundBase):
pass
class TCGPlayerOrderRefund(TCGPlayerOrderRefundBase):
id: int
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True