from typing import List, Optional from pydantic import BaseModel, EmailStr # Shared properties class ClientBase(BaseModel): name: str email: EmailStr company_name: Optional[str] = None address: Optional[str] = None phone: Optional[str] = None notes: Optional[str] = None # Properties to receive via API on creation class ClientCreate(ClientBase): pass # Properties to receive via API on update class ClientUpdate(ClientBase): name: Optional[str] = None email: Optional[EmailStr] = None # Properties shared by models stored in DB class ClientInDBBase(ClientBase): id: int user_id: int class Config: orm_mode = True # Properties to return via API class Client(ClientInDBBase): pass # Properties stored in DB class ClientInDB(ClientInDBBase): pass # Client with invoices class ClientWithInvoices(Client): from app.schemas.invoice import Invoice invoices: List[Invoice] = []