from pydantic import BaseModel, Field, EmailStr, ConfigDict from typing import Optional, List from datetime import datetime import uuid from enum import Enum # BFF Models class Token(BaseModel): access_token: str token_type: str class AccountProfileUpdateRequest(BaseModel): firstName: str surname: str email: EmailStr phone: str class AccountPasswordChangeRequest(BaseModel): currentPassword: str newPassword: str class TransactionStatus(str, Enum): WAITING = 'waiting' PROCESS = 'process' DONE = 'done' REJECT = 'reject' ERROR = 'error' NEW = 'new' class AgentTransactionResponse(BaseModel): amount: float status: TransactionStatus transaction_group: uuid.UUID create_dttm: datetime update_dttm: datetime agent_name: Optional[str] = None class AutoApproveSettingsRequest(BaseModel): auto_approve: bool apply_to_current: Optional[bool] = False class ApproveTransactionsRequest(BaseModel): transaction_ids: List[uuid.UUID] # New Response Models for BFF APIs class RegisterResponse(BaseModel): msg: str class TgAuthResponse(BaseModel): msg: str tg_id: int class DashboardCardsResponse(BaseModel): totalRevenue: float totalPayouts: float activeReferrals: int pendingPayouts: float totalSales: int class DashboardChartTotalItem(BaseModel): date: str revenue: float sales: int class DashboardChartTotalResponse(BaseModel): items: List[DashboardChartTotalItem] class DashboardChartAgentItem(BaseModel): name: str count: int sum: float class DashboardChartAgentResponse(BaseModel): items: List[DashboardChartAgentItem] class StatAgentsItem(BaseModel): name: str refCount: int salesCount: int salesSum: float crediting: float class StatAgentsResponse(BaseModel): items: List[StatAgentsItem] class StatReferralsItem(BaseModel): ref: str agent: Optional[str] = None description: str promocode: str salesSum: float salesCount: int class StatReferralsResponse(BaseModel): items: List[StatReferralsItem] class StatSalesItem(BaseModel): saleId: str cost: float crediting: float ref: Optional[str] = None name: Optional[str] = None class StatSalesResponse(BaseModel): items: List[StatSalesItem] class BillingCardsResponse(BaseModel): cost: float crediting: float pendingPayouts: float class BillingChartStatItem(BaseModel): date: str status: str count: int class BillingChartStatResponse(BaseModel): items: List[BillingChartStatItem] class BillingChartPieItem(BaseModel): status: str count: int class BillingChartPieResponse(BaseModel): items: List[BillingChartPieItem] class BillingPayoutsTransactionsItem(BaseModel): id: uuid.UUID amount: float agent: Optional[str] = None status: TransactionStatus create_dttm: datetime update_dttm: datetime class BillingPayoutsTransactionsResponse(BaseModel): items: List[BillingPayoutsTransactionsItem] class AccountResponse(BaseModel): firstName: Optional[str] = None surname: Optional[str] = None class CompanyProfileResponse(BaseModel): name: str key: str commission: float agent_commission: float class AccountProfileResponse(BaseModel): firstName: Optional[str] = None surname: Optional[str] = None phone: Optional[str] = None email: Optional[EmailStr] = None create_dttm: datetime company: CompanyProfileResponse class AccountProfileUpdateResponse(BaseModel): msg: str class AccountPasswordChangeResponse(BaseModel): msg: str class AutoApproveSettingsGetResponse(BaseModel): auto_approve_transactions: bool class AutoApproveSettingsUpdateResponse(BaseModel): msg: str auto_approve_transactions: bool class ApproveTransactionsResult(BaseModel): msg: str approved_count: int # New models for integration tokens class IntegrationTokenResponse(BaseModel): id: int description: str masked_token: str rawToken: Optional[str] = None create_dttm: datetime use_dttm: Optional[datetime] = None model_config = ConfigDict(from_attributes=True) class IntegrationTokenCreateRequest(BaseModel): description: str class IntegrationTokenUpdateRequest(BaseModel): id: int description: str