Files
junhong_cmp_fiber/openspec/specs/dto-name-fields/spec.md
huang d9de704d73
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 49s
归档
2026-04-14 12:14:29 +08:00

3.7 KiB
Raw Blame History

Response DTO 规范规范

MODIFIED Requirements

Requirement: Response DTO 必须包含状态文字字段

项目所有 Response DTO 中,若包含 int 类型状态字段,必须同时包含对应的 _name_text 文字字段,用于显示该状态的中文描述。

Scenario: 账号列表 Response DTO

  • WHEN API 返回账号列表(GET /api/admin/accounts
  • THEN 响应中每个账号对象包含 status 字段int0=禁用1=启用)
  • THEN 响应中同时包含 status_name 字段string"禁用"或"启用"
  • THEN 前端可直接使用 status_name 显示在 UI 上,无需维护单独的状态枚举映射表

Scenario: 资产详情 Response DTO

  • WHEN API 返回单个资产信息(GET /api/admin/assets/:id
  • THEN 响应包含 statusintstatus_namestring
  • WHEN 资产包含多个状态字段(如 network_statusactivation_statusonline_status
  • THEN 每个状态字段对应一个文字字段:network_status_nameactivation_status_nameonline_status_name

Scenario: 订单详情中的多重状态

  • WHEN API 返回订单详情(GET /api/admin/orders/:id
  • THEN 订单对象包含 payment_statusintpayment_status_namestring
  • THEN 订单对象包含 commission_statusintcommission_status_namestring
  • THEN 若订单还有其他 int 类型状态字段,均配有对应的 _name 字段

Requirement: DTO 文字字段命名规则

状态文字字段的命名应遵循统一规则:{状态字段名}_name{状态字段名}_text

Scenario: 标准命名

  • WHEN 定义 DTO 时,状态字段为 Status
  • THEN 文字字段命名为 StatusName(推荐)或 StatusText
  • WHEN 状态字段为 PaymentStatus
  • THEN 文字字段命名为 PaymentStatusNamePaymentStatusText

Scenario: JSON 序列化一致性

  • WHEN DTO 序列化为 JSON 返回给客户端
  • THEN 字段名使用 snake_case符合项目 API 规范)
    • Go 字段 Status → JSON status
    • Go 字段 StatusName → JSON status_name

Requirement: Service 层自动赋值 _name 字段

Service 层在构建 Response DTO 时,应自动赋值 _name/_text 字段,映射状态常量到中文描述。

Scenario: 获取账号详情自动赋值

  • WHEN AccountService.GetAccount(ctx, accountID) 被调用
  • THEN Service 查询数据库获取账号信息
  • THEN Service 构建 Response DTO自动设置 StatusName = constants.GetAccountStatusName(account.Status)
  • THEN 返回完整的 DTO 给 HandlerHandler 直接序列化响应

Scenario: 列表查询批量赋值

  • WHEN AccountService.ListAccounts(ctx, query) 被调用
  • THEN Service 查询数据库获取账号列表
  • THEN Service 遍历每个账号,批量赋值 StatusName 字段
  • THEN 返回完整列表

Requirement: 常量映射函数

pkg/constants/ 中为每个业务模块定义 Get{Module}StatusName(status int) string 函数,用于映射状态值到中文描述。

Scenario: 账号状态映射函数

  • WHEN Service 层需要获取账号状态的中文描述
  • THEN 调用 constants.GetAccountStatusName(status)
  • THEN 函数返回:
    • status == 0,返回 "禁用"
    • status == 1,返回 "启用"
    • 若状态值未知,返回 "未知"(不返回空字符串)

Scenario: 订单支付状态映射函数

  • WHEN Service 层需要获取订单支付状态描述
  • THEN 调用 constants.GetOrderPaymentStatusName(status)
  • THEN 函数返回对应的中文(如 "待支付"、"已支付"、"已完成" 等)