hesabixArc/hesabixAPI/adapters/api/v1/schema_models/bank_account.py

94 lines
3.2 KiB
Python
Raw Normal View History

2025-10-03 02:25:35 +03:30
from __future__ import annotations
from typing import Optional
from pydantic import BaseModel, Field
class BankAccountCreateRequest(BaseModel):
code: Optional[str] = Field(default=None, max_length=50)
name: str = Field(..., min_length=1, max_length=255)
branch: Optional[str] = Field(default=None, max_length=255)
account_number: Optional[str] = Field(default=None, max_length=50)
sheba_number: Optional[str] = Field(default=None, max_length=30)
card_number: Optional[str] = Field(default=None, max_length=20)
owner_name: Optional[str] = Field(default=None, max_length=255)
pos_number: Optional[str] = Field(default=None, max_length=50)
payment_id: Optional[str] = Field(default=None, max_length=100)
description: Optional[str] = Field(default=None, max_length=500)
currency_id: int = Field(..., ge=1)
is_active: bool = Field(default=True)
is_default: bool = Field(default=False)
@classmethod
def __get_validators__(cls):
yield from super().__get_validators__()
@classmethod
def validate(cls, value): # type: ignore[override]
obj = super().validate(value)
if getattr(obj, 'code', None) is not None:
code_val = str(getattr(obj, 'code'))
if code_val.strip() != '':
if not code_val.isdigit():
raise ValueError("کد حساب باید فقط عددی باشد")
if len(code_val) < 3:
raise ValueError("کد حساب باید حداقل ۳ رقم باشد")
return obj
class BankAccountUpdateRequest(BaseModel):
code: Optional[str] = Field(default=None, max_length=50)
name: Optional[str] = Field(default=None, min_length=1, max_length=255)
branch: Optional[str] = Field(default=None, max_length=255)
account_number: Optional[str] = Field(default=None, max_length=50)
sheba_number: Optional[str] = Field(default=None, max_length=30)
card_number: Optional[str] = Field(default=None, max_length=20)
owner_name: Optional[str] = Field(default=None, max_length=255)
pos_number: Optional[str] = Field(default=None, max_length=50)
payment_id: Optional[str] = Field(default=None, max_length=100)
description: Optional[str] = Field(default=None, max_length=500)
currency_id: Optional[int] = Field(default=None, ge=1)
is_active: Optional[bool] = Field(default=None)
is_default: Optional[bool] = Field(default=None)
@classmethod
def __get_validators__(cls):
yield from super().__get_validators__()
@classmethod
def validate(cls, value): # type: ignore[override]
obj = super().validate(value)
if getattr(obj, 'code', None) is not None:
code_val = str(getattr(obj, 'code'))
if code_val.strip() != '':
if not code_val.isdigit():
raise ValueError("کد حساب باید فقط عددی باشد")
if len(code_val) < 3:
raise ValueError("کد حساب باید حداقل ۳ رقم باشد")
return obj
class BankAccountResponse(BaseModel):
id: int
business_id: int
code: Optional[str]
name: str
branch: Optional[str]
account_number: Optional[str]
sheba_number: Optional[str]
card_number: Optional[str]
owner_name: Optional[str]
pos_number: Optional[str]
payment_id: Optional[str]
description: Optional[str]
currency_id: int
is_active: bool
is_default: bool
created_at: str
updated_at: str
class Config:
from_attributes = True