from pydantic import BaseModel from typing import List, Optional from datetime import datetime class TransactionBase(BaseModel): preauthorize_amount: Optional[float] = None # Amount preauthorized (for auth transactions) charge_amount: Optional[float] = None # Final charge amount (for charge/capture transactions) transaction_type: int # 0 = charge, 1 = auth, 3 = capture - Required for database service_id: Optional[int] = None # Reference to Service_Service.id delivery_id: Optional[int] = None # Reference to Delivery_Delivery.id card_id: Optional[int] = None # Reference to credit card used for payment payment_gateway: int = 1 # 1 = Authorize.Net, 0 = Other rejection_reason: Optional[str] = None # Detailed error message when payment is declined class TransactionCreate(TransactionBase): charge_amount: float # Final charge amount card_number: str expiration_date: str # MM/YY cvv: str class TransactionAuthorize(TransactionBase): preauthorize_amount: float # Amount to preauthorize card_number: str expiration_date: str cvv: str class TransactionCapture(BaseModel): charge_amount: float # Amount to capture auth_net_transaction_id: str class Transaction(TransactionBase): id: int transaction_type: int # 0 = charge, 1 = auth, 3 = capture status: int # 0 = approved, 1 = declined auth_net_transaction_id: Optional[str] = None customer_id: int class Config: orm_mode = True class CustomerBase(BaseModel): account_number: Optional[str] = None customer_last_name: Optional[str] = None customer_first_name: Optional[str] = None customer_town: Optional[str] = None customer_state: Optional[int] = None customer_zip: Optional[str] = None customer_first_call: Optional[datetime] = None customer_email: Optional[str] = None customer_automatic: Optional[int] = None customer_phone_number: Optional[str] = None customer_home_type: Optional[int] = None customer_apt: Optional[str] = None customer_address: Optional[str] = None company_id: Optional[int] = None customer_latitude: Optional[str] = None customer_longitude: Optional[str] = None correct_address: Optional[bool] = None class Customer(CustomerBase): id: int class Config: orm_mode = True