from decimal import Decimal from pydantic import BaseModel,Field from src.application.domain.enums import OrderStatus,PaymentStatus,SbpWithdrawalStatus class CreateOrder(BaseModel): usdt_amount: Decimal = Field(gt=0, decimal_places=2, max_digits=20) usdt_exchange_rate: Decimal = Field(gt=0, decimal_places=2, max_digits=20) gas_fee: Decimal = Field(gt=0, decimal_places=2, max_digits=20) total_price: Decimal = Field(gt=0, decimal_places=2, max_digits=20) class OrderPaymentResponse(BaseModel): id: str | None = None created_at: str | None = None updated_at: str | None = None user_id: str | None = None usdt_amount: str | None = None usdt_exchange_rate: str | None = None gas_fee: str | None = None total_price: str | None = None service_fee: str | None = None status: OrderStatus | None = None client_payment_id: str | None = None itpay_payment_qr_url_desktop: str | None = None itpay_payment_qr_url_android: str | None = None itpay_payment_qr_url_ios: str | None = None itpay_payment_qr_image_desktop: str | None = None itpay_payment_qr_image_android: str | None = None itpay_payment_qr_image_ios: str | None = None itpay_id: str | None = None itpay_qr_id: str | None = None itpay_amount: str | None = None itpay_created_at: str | None = None class PaymentResponse(BaseModel): id: str | None = None created_at: str | None = None updated_at: str | None = None user_id: str | None = None order_id: str | None = None status: PaymentStatus | None = None receipt_cloudekassir_id: str | None = None receipt_cloudekassir_link: str | None = None itpay_payment_id: str | None = None itpay_paid_amount: str | None = None transaction_id: str | None = None web3_transaction_hash: str | None = None paid_at: str | None = None expired_date: str | None = None class SbpWithdrawalOperationResponse(BaseModel): id: str | None = None created_at: str | None = None updated_at: str | None = None user_id: str | None = None bank_id: str | None = None bank_name: str | None = None phone: str | None = None wallet_address: str | None = None usdt_amount: str | None = None rub_amount: str | None = None usdt_exchange_rate: str | None = None service_fee_rate: str | None = None service_fee_usdt: str | None = None mozen_order_id: str | None = None trace_id: str | None = None status: SbpWithdrawalStatus | None = None provider_error: str | None = None usdt_received_at: str | None = None payout_created_at: str | None = None payout_completed_at: str | None = None class ClientOperationResponse(BaseModel): type: str created_at: str payment: PaymentResponse | None = None withdrawal: SbpWithdrawalOperationResponse | None = None class CreateOrderResponse(BaseModel): status_code: int order: OrderPaymentResponse class PaymentConfigResponse(BaseModel): status_code: int usdt_exchange_rate: str gas_fee: str service_fee_rate: str one_usdt_service_fee: str one_usdt_total_price: str created_at: str class PaymentQuoteResponse(BaseModel): status_code: int usdt_amount: str usdt_exchange_rate: str gas_fee: str service_fee: str total_price: str service_fee_rate: str created_at: str class OrderWithPaymentResponse(BaseModel): order: OrderPaymentResponse payment: PaymentResponse | None = None class OrderDetailResponse(OrderWithPaymentResponse): status_code: int class OrdersResponse(BaseModel): status_code: int orders: list[OrderWithPaymentResponse] limit: int offset: int class PaymentsResponse(BaseModel): status_code: int payments: list[PaymentResponse] limit: int offset: int class ClientOperationsResponse(BaseModel): status_code: int operations: list[ClientOperationResponse] limit: int offset: int class PaymentDetailResponse(BaseModel): status_code: int payment: PaymentResponse class OrderStatusResponse(BaseModel): status_code: int order_id: str order_status: OrderStatus | None = None payment_status: PaymentStatus | None = None receipt_cloudekassir_link: str | None = None web3_transaction_hash: str | None = None updated_at: str | None = None class ErrorResponse(BaseModel): detail: str status_code: int