from datetime import datetime from typing import Optional from pydantic import BaseModel # Shared properties class CustomerBase(BaseModel): first_name: str last_name: str email: str # Using str instead of EmailStr to avoid additional dependency phone: Optional[str] = None address: Optional[str] = None # Properties to receive on customer creation class CustomerCreate(CustomerBase): pass # Properties to receive on customer update class CustomerUpdate(CustomerBase): first_name: Optional[str] = None last_name: Optional[str] = None email: Optional[str] = None phone: Optional[str] = None address: Optional[str] = None # Properties shared by models stored in DB class CustomerInDBBase(CustomerBase): id: int created_at: datetime updated_at: datetime class Config: from_attributes = True # Properties to return to client class Customer(CustomerInDBBase): pass