feat: Airwallex 发卡管理后台完整实现

- 后端: FastAPI + SQLAlchemy + SQLite, JWT认证, 代理支持的AirwallexClient
- 前端: React 18 + Vite + Ant Design 5, 中文界面
- 功能: 卡片管理, 持卡人管理, 交易记录, API令牌, 系统设置, 审计日志
- 第三方API: X-API-Key认证, 权限控制
- Docker部署: docker-compose编排前后端
This commit is contained in:
zqq61
2026-03-15 23:05:08 +08:00
commit 4f53889a8e
98 changed files with 10847 additions and 0 deletions

View File

@@ -0,0 +1,41 @@
"""
Models for the Airwallex Issuing Authorization API.
"""
from typing import Optional, List, Dict, Any
from datetime import datetime
from pydantic import Field
from .base import AirwallexModel
from .issuing_common import Merchant, RiskDetails, HasMoreResponse
class Authorization(AirwallexModel):
"""Model for an Airwallex issuing authorization."""
resource_name: str = "issuing/authorizations"
acquiring_institution_identifier: Optional[str] = Field(None, description="Unique Identifier for acquiring institution")
auth_code: Optional[str] = Field(None, description="Authorization Code")
billing_amount: float = Field(..., description="Billing Amount")
billing_currency: str = Field(..., description="Billing Currency")
card_id: str = Field(..., description="Unique Identifier for card")
card_nickname: Optional[str] = Field(None, description="The nickname of the card used")
client_data: Optional[str] = Field(None, description="Client data stored against the card record")
create_time: datetime = Field(..., description="The time this outstanding authorization was created")
digital_wallet_token_id: Optional[str] = Field(None, description="Unique Identifier for digital token")
expiry_date: Optional[datetime] = Field(None, description="The authorization will expire after this date if not posted")
failure_reason: Optional[str] = Field(None, description="The reason why this authorization failed (if status is FAILED)")
lifecycle_id: Optional[str] = Field(None, description="A identifier that links multiple related transactions")
masked_card_number: Optional[str] = Field(None, description="Masked card number")
merchant: Optional[Merchant] = Field(None, description="Merchant details")
network_transaction_id: Optional[str] = Field(None, description="The transaction ID from network")
retrieval_ref: Optional[str] = Field(None, description="Transaction retrieval reference number")
risk_details: Optional[RiskDetails] = Field(None, description="Risk details")
status: str = Field(..., description="The status of this authorization")
transaction_amount: float = Field(..., description="Transaction amount")
transaction_currency: str = Field(..., description="Transaction currency")
transaction_id: str = Field(..., description="Unique id for transaction")
updated_by_transaction: Optional[str] = Field(None, description="Id of the transaction which updated status of this transaction")
class AuthorizationListResponse(HasMoreResponse):
"""Model for authorization list response."""
items: List[Authorization] = Field(..., description="List of authorizations")