75 lines
1.8 KiB
Python
75 lines
1.8 KiB
Python
from pydantic import BaseModel
|
|
from datetime import date
|
|
from typing import Optional, List
|
|
|
|
# -----------------------
|
|
# Customer Schemas
|
|
# -----------------------
|
|
class CustomerBase(BaseModel):
|
|
full_name: str
|
|
email: str
|
|
phone: Optional[str] = None
|
|
date_of_birth: Optional[date] = None
|
|
age: Optional[int] = None
|
|
gender: Optional[str] = None
|
|
street_address: Optional[str] = None
|
|
city: Optional[str] = None
|
|
state: Optional[str] = None
|
|
zip_code: Optional[str] = None
|
|
home_branch_id: Optional[int] = None
|
|
customer_since: Optional[date] = None
|
|
employment_status: Optional[str] = None
|
|
annual_income: Optional[float] = None
|
|
credit_score: Optional[int] = None
|
|
preferred_contact_method: Optional[str] = None
|
|
|
|
class Customer(CustomerBase):
|
|
customer_id: str
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
# -----------------------
|
|
# Account Schemas
|
|
# -----------------------
|
|
class AccountBase(BaseModel):
|
|
customer_id: str
|
|
account_type: str
|
|
open_date: date
|
|
balance: float
|
|
branch_id: Optional[int] = None
|
|
|
|
class Account(AccountBase):
|
|
account_id: str
|
|
account_number: str
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
# -----------------------
|
|
# Transaction Schemas
|
|
# -----------------------
|
|
class TransactionBase(BaseModel):
|
|
account_id: str
|
|
branch_id: Optional[int] = None
|
|
transaction_type: str
|
|
amount: float
|
|
date: date
|
|
balance_after: float
|
|
vendor: Optional[str] = None
|
|
transaction_location: Optional[str] = None
|
|
|
|
class Transaction(TransactionBase):
|
|
transaction_id: str
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
# -----------------------
|
|
# Nested Schemas
|
|
# -----------------------
|
|
class AccountWithTransactions(Account):
|
|
transactions: Optional[List[Transaction]] = []
|
|
|
|
class CustomerWithAccounts(Customer):
|
|
accounts: Optional[List[AccountWithTransactions]] = []
|