from datetime import datetime from typing import Optional, TYPE_CHECKING, Any from enum import Enum from pydantic import BaseModel # Import at the end to avoid circular imports if TYPE_CHECKING: pass class TransactionType(str, Enum): PURCHASE = "purchase" SALE = "sale" ADJUSTMENT = "adjustment" RETURN = "return" # Shared properties class TransactionBase(BaseModel): transaction_type: TransactionType quantity: int unit_price: float total_price: float reference_number: Optional[str] = None notes: Optional[str] = None transaction_date: Optional[datetime] = None item_id: str user_id: str # Properties to receive via API on creation class TransactionCreate(TransactionBase): pass # Properties to receive via API on update class TransactionUpdate(TransactionBase): transaction_type: Optional[TransactionType] = None quantity: Optional[int] = None unit_price: Optional[float] = None total_price: Optional[float] = None item_id: Optional[str] = None user_id: Optional[str] = None class TransactionInDBBase(TransactionBase): id: str created_at: datetime updated_at: Optional[datetime] = None class Config: orm_mode = True # Additional properties to return via API class Transaction(TransactionInDBBase): pass # Transaction with extended information class TransactionWithDetails(Transaction): item: Any # Import at the end to avoid circular imports TransactionWithDetails.update_forward_refs()