Files

119 lines
2.9 KiB
Python

from datetime import datetime
from typing import Literal
from pydantic import BaseModel, Field
class WalletBalanceResponse(BaseModel):
user_id: int
balance: float
currency: str
updated_at: datetime | None = None
class WalletTransactionResponse(BaseModel):
id: int
user_id: int
cost_center_id: int | None = None
transaction_type: Literal["print_charge", "deposit", "withdraw", "manual_adjustment"]
amount: float
balance_after: float | None = None
description: str | None = None
created_by_user_id: int | None = None
print_run_id: str | None = None
print_archive_id: int | None = None
print_queue_id: int | None = None
created_at: datetime
class Config:
from_attributes = True
class WalletTransactionListResponse(BaseModel):
items: list[WalletTransactionResponse]
total: int
limit: int
offset: int
class CostCenterSummaryResponse(BaseModel):
id: int
name: str
is_private: bool
owner_user_id: int | None = None
is_active: bool
total_balance: float = 0.0
total_budget: float | None = None
monthly_budget: float | None = None
budget_mode: str = "none"
budget_limit: float | None = None
budget_used: float | None = None
budget_available: float | None = None
can_print: bool = True
class Config:
from_attributes = True
class WalletAdjustmentRequest(BaseModel):
amount: float = Field(..., gt=0)
description: str | None = None
cost_center_id: int | None = None
class WalletAdjustmentResponse(BaseModel):
transaction: WalletTransactionResponse
balance: WalletBalanceResponse
class TransactionEditRequest(BaseModel):
user_id: int | None = None
cost_center_id: int | None = None
amount: float | None = None
description: str | None = None
class ManualPrintRequest(BaseModel):
user_id: int
cost_center_id: int
amount: float = Field(..., gt=0)
description: str | None = None
created_at: datetime | None = None
class CostCenterCreateRequest(BaseModel):
name: str = Field(..., min_length=1, max_length=150)
total_budget: float | None = Field(default=None, ge=0)
monthly_budget: float | None = Field(default=None, ge=0)
is_active: bool = True
class CostCenterUpdateRequest(BaseModel):
name: str | None = Field(default=None, min_length=1, max_length=150)
is_active: bool | None = None
class CostCenterBudgetUpdateRequest(BaseModel):
total_budget: float | None = Field(default=None, ge=0)
monthly_budget: float | None = Field(default=None, ge=0)
class CostCenterMemberRequest(BaseModel):
user_id: int
can_print: bool = True
class CostCenterMemberResponse(BaseModel):
id: int
cost_center_id: int
user_id: int
can_print: bool
created_at: datetime
class Config:
from_attributes = True
class CostCenterDetailResponse(CostCenterSummaryResponse):
members: list[CostCenterMemberResponse] = []