102 lines
2.3 KiB
Python
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
|
|
|
|
|