Files
wtf-backend/ARCHITECTURE.md

6.1 KiB
Raw Permalink Blame History

WTFX Backend Architecture Rules (后端架构铁律)

核心定位WTFX 采用 Python + FastAPI + PostgreSQL + Redis模块化单体 (Modular Monolith) 架构。 适用对象:所有开发者与 AI Coding Agent。在编写或修改任何后端代码之前,必须严格遵守本规范


1. 架构核心铁律 (Non-Negotiable Rules)

  1. 【分层单向依赖】
    • 依赖调用链严格为:API Route -> Domain Service -> Repository -> Database/Infrastructure
    • 严禁反向或跨层调用(如 Route 直连 DB,或 Repo 调用 Service)。
  2. 【禁止 Route 直连数据库】
    • API 路由层(app/api/)只允许做:入参校验 (Pydantic Schema)、鉴权依赖注入、调用 Domain Service、返回标准响应。
    • 严禁在 Route 中执行 SQL 或 ORM 查询
  3. 【Domain 纯净性】
    • 业务领域层(app/domains/)代表纯粹的业务大脑,严禁导入 FastAPI 或任何 HTTP/WebSocket 相关的 Web 框架依赖
  4. 【资金与状态变更强制走 Ledger】
    • 严禁直接执行 user.balance += amount 等无据操作。
    • 所有账户资金变动(充值、下注扣款、保证金冻结/解冻、手续费、获胜兑付)必须通过 LedgerService 生成不可变的复式记账流水 (LedgerEntry)
  5. 【外部第三方服务强制使用 Adapter 隔离】
    • 链上 RPC、Hyperliquid、价格预言机等外部系统交互必须统一封装在 app/infrastructure/ 适配器中。
    • Domain 业务层只依赖抽象接口(如 TradingProvider / ChainClient),不感知底层具体 API 细节。
  6. 【事件总线驱动,解耦 WebSocket】
    • 业务状态变更(如订单成交、市场毕业)只向 EventBus 发送领域事件。
    • WebSocket 模块(app/ws/)独立订阅事件并广播给在线客户端,业务逻辑层严禁直接依赖 WS 连接对象。
  7. 【Model 与 Schema 严格分离】
    • models/ 映射数据库实体,schemas/ 定义 API 输入输出结构体。
    • 严禁将数据库 Model 直接作为 API Response 返回,防止敏感字段(密码哈希、内部风控分等)意外泄露。

2. 目录职责分工

wtf-backend/
├── app/
│   ├── main.py                     # 应用入口与生命周期管理 (Lifespan)
│   ├── config.py                   # Pydantic Settings 环境变量配置
│   ├── logging.py                  # 结构化日志配置
│   │
│   ├── api/                        # HTTP 接口接入层 (只做请求解析与转发)
│   │   ├── dependencies.py         # 共享依赖注入 (DB Session, 当前用户, Auth)
│   │   └── routes/                 # 各业务模块的路由入口
│   │       ├── auth.py             # Web3 SIWE 钱包登录与 JWT
│   │       ├── markets.py          # 预测市场查询与建盘
│   │       ├── orders.py           # 交易下单与撤单
│   │       ├── positions.py        # 用户持仓查询
│   │       └── wallet.py           # 充值、提现与流水
│   │
│   ├── domains/                    # 业务领域大脑 (纯业务逻辑,无 Web 依赖)
│   │   ├── market/                 # 市场状态机与联合曲线规则
│   │   ├── trading/                # 交易撮合与风控检查
│   │   ├── ledger/                 # 【核心】不可变流水账本
│   │   ├── wallet/                 # 钱包余额状态管理
│   │   ├── settlement/             # 预测到期结算与兑付
│   │   └── user/                   # 用户信息与邀请返佣
│   │
│   ├── infrastructure/             # 外部世界适配层 (数据库、缓存、链上、三方 API)
│   │   ├── database/               # PostgreSQL 连接池与异步 Session 工厂
│   │   ├── redis/                  # Redis 缓存与 Streams 事件总线
│   │   ├── blockchain/             # EVM RPC 监听与合约调用客户端
│   │   └── external/               # Hyperliquid / CLOB 等外部交易适配器
│   │
│   ├── models/                     # SQLAlchemy 2.0 异步数据库实体
│   │   ├── market.py
│   │   ├── order.py
│   │   ├── position.py
│   │   ├── ledger.py
│   │   └── user.py
│   │
│   ├── schemas/                    # Pydantic v2 请求与响应数据传输对象 (DTO)
│   │   ├── market.py
│   │   ├── order.py
│   │   ├── ledger.py
│   │   └── common.py
│   │
│   └── ws/                         # WebSocket 实时网关 (行情推流与用户私有信道)
│       ├── manager.py              # 连接池与订阅频道管理
│       └── handlers.py             # WS 消息解析与心跳
│
├── migrations/                     # Alembic 数据库迁移脚本
├── tests/                          # 单元测试与集成测试
├── Dockerfile                      # 生产镜像构建文件
├── docker-compose.yml              # 本地开发与服务器运行编排
└── requirements.txt                # 锁定依赖项

3. 核心业务流程标准示例 (How to Write Code)

正确的下单流程示例 (Trading Flow):

[Client] ---> POST /api/v1/orders
                 │
                 ▼
          [orders.py (Route)]
                 │ (1. 解析 CreateOrderRequest Schema)
                 │ (2. 依赖注入 TradingService)
                 ▼
       [TradingService (Domain)]
                 │ (1. 风险检查 RiskCheck)
                 │ (2. 冻结资金: 调用 LedgerService.freeze_balance)
                 │ (3. 创建订单: 调用 OrderRepository.create)
                 │ (4. 抛出事件: EventBus.publish("OrderCreated"))
                 ▼
          [PostgreSQL] (Commit Transaction)
                 │
                 ▼
          [WS Gateway] (异步监听到 OrderCreated -> 广播行情)