Files
delphi-database-v2/app/schemas.py

102 lines
2.3 KiB
Python

"""
Pydantic schemas for API responses.
Defines output models for Clients, Phones, Cases, and Transactions, along with
shared pagination envelopes for list endpoints.
"""
from __future__ import annotations
from datetime import datetime
from typing import List, Optional
from pydantic import BaseModel, ConfigDict
class PhoneOut(BaseModel):
id: int
phone_type: Optional[str] = None
phone_number: Optional[str] = None
model_config = ConfigDict(from_attributes=True)
class ClientOut(BaseModel):
id: int
rolodex_id: Optional[str] = None
first_name: Optional[str] = None
last_name: Optional[str] = None
company: Optional[str] = None
address: Optional[str] = None
city: Optional[str] = None
state: Optional[str] = None
zip_code: Optional[str] = None
phones: Optional[List[PhoneOut]] = None
model_config = ConfigDict(from_attributes=True)
class CaseClientOut(BaseModel):
id: int
rolodex_id: Optional[str] = None
first_name: Optional[str] = None
last_name: Optional[str] = None
company: Optional[str] = None
model_config = ConfigDict(from_attributes=True)
class CaseOut(BaseModel):
id: int
file_no: str
status: Optional[str] = None
case_type: Optional[str] = None
description: Optional[str] = None
open_date: Optional[datetime] = None
close_date: Optional[datetime] = None
client: Optional[CaseClientOut] = None
model_config = ConfigDict(from_attributes=True)
class TransactionOut(BaseModel):
id: int
case_id: int
case_file_no: Optional[str] = None
transaction_date: Optional[datetime] = None
item_no: Optional[int] = None
amount: Optional[float] = None
billed: Optional[str] = None
t_code: Optional[str] = None
t_type_l: Optional[str] = None
quantity: Optional[float] = None
rate: Optional[float] = None
description: Optional[str] = None
employee_number: Optional[str] = None
model_config = ConfigDict(from_attributes=True)
class Pagination(BaseModel):
page: int
page_size: int
total: int
total_pages: int
class RolodexListResponse(BaseModel):
items: List[ClientOut]
pagination: Pagination
class FilesListResponse(BaseModel):
items: List[CaseOut]
pagination: Pagination
class LedgerListResponse(BaseModel):
items: List[TransactionOut]
pagination: Pagination