partner-core/bff_models.py

192 lines
4.3 KiB
Python

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