chatapp-gateway/docs/ai/第一版 prompt.md
2026-04-04 01:28:57 +08:00

4.4 KiB
Raw Blame History

ChatAppGateway 第一版 prompt

你是一名资深 Golang 后端架构师,请为一个海外社交 App 实现一个主业务聚合服务 ChatAppGateway

服务定位

  • ChatAppGateway 不是纯反向代理网关,而是 BFF / 聚合编排服务。
  • 对客户端暴露 HTTP JSON API。
  • 对内通过 gRPC 调用:
    • ChatAppUser.Login
    • ChatAppPay.QueryOrder
  • 自身不实现用户域认证规则,也不实现支付域核心规则,只做参数校验、字段归一化、协议适配、统一错误响应、日志与 trace。

目标能力

第一版只实现三条 HTTP 接口:

  1. GET /health
  2. GET /ready
  3. POST /api/v1/auth/login
  4. GET /api/v1/pay/orders/{order_no}

配置要求

配置文件放在 config/xxx.yaml,默认读取 config/local.yaml

YAML 结构固定如下:

app:
  name: chatappgateway
  env: local
  http_addr: ":8080"
  shutdown_timeout: 10s

grpc:
  user:
    target: "127.0.0.1:9001"
    timeout: 3s
  pay:
    target: "127.0.0.1:9002"
    timeout: 3s

必须支持:

  • -config config/local.yaml 命令行参数
  • gopkg.in/yaml.v3
  • 默认值补齐
  • 配置校验

登录接口要求

POST /api/v1/auth/login

请求 DTO 至少包含:

  • login_type
  • account
  • password
  • country_code
  • verify_code
  • provider
  • provider_token
  • device_id
  • platform
  • app_version

支持三种登录模式:

  1. password
    • 必填:accountpassword
  2. sms_code
    • 必填:country_codeaccountverify_code
  3. oauth
    • 必填:providerprovider_token

网关职责:

  • 只做模式校验和字段归一化
  • 将请求映射到 ChatAppUser.Login
  • 接收用户服务返回后再统一包装给客户端

ChatAppUser.Login 返回至少包含:

  • user_id
  • access_token
  • refresh_token
  • expires_in
  • is_new_user
  • profile

其中 profile 至少包含:

  • user_id
  • nickname
  • avatar_url

支付查询接口要求

GET /api/v1/pay/orders/{order_no}

网关职责:

  • 校验 order_no 非空
  • 调用 ChatAppPay.QueryOrder
  • 把支付服务返回的订单结果转成统一 HTTP JSON 响应

返回字段至少包含:

  • order_no
  • user_id
  • status
  • amount
  • currency
  • subject
  • pay_method
  • paid_at

健康检查要求

GET /health

  • 只做网关自身存活检查
  • 固定返回 200
  • 返回:
{
  "status": "ok",
  "service": "chatappgateway"
}

GET /ready

  • 用于 K8s / LB readiness probe
  • 不是只判断进程活着
  • 至少要判断:
    • 配置已经成功加载
    • 关键依赖已经连通
    • 服务已经具备接流量能力
  • ChatAppGateway 第一版来说,/ready 至少检查:
    • ChatAppUser 的 gRPC 连接可用
    • ChatAppPay 的 gRPC 连接可用
  • 返回 200 时表示可以接流量,失败时返回 503

错误码和状态码要求

  • 参数错误:400
  • 登录失败或凭证错误:401
  • 订单不存在:404
  • 下游 gRPC 超时:504
  • 下游 gRPC 不可用或内部异常:502

要求统一 JSON 错误结构,例如:

{
  "code": "bad_request",
  "message": "login_type is required",
  "request_id": "..."
}

目录结构要求

项目目录至少包含:

  • cmd/gateway/main.go
  • internal/config
  • internal/app
  • internal/transport/http
  • internal/integration/usergrpc
  • internal/integration/paygrpc
  • internal/service/auth
  • internal/service/pay
  • api/proto
  • config/local.yaml

技术要求

  • 使用 idiomatic Go
  • 使用 http.ServeMux
  • 使用 slog 结构化日志
  • 支持优雅关闭
  • 收到 SIGTERM 后先摘除 /ready,再停止接新请求,等待旧请求处理完成后退出
  • gRPC 连接使用 insecure.NewCredentials() 即可
  • 所有关键代码写中文注释
  • 不要写成教学 demo要保持生产风格

测试要求

至少覆盖以下场景:

  • 配置加载成功
  • 配置非法时失败
  • /health 返回正确 JSON
  • /ready 在依赖可用时返回 200在依赖不可用时返回 503
  • 三种 login_type 的参数校验
  • 登录请求正确映射到 ChatAppUser.Login
  • 订单查询正确映射到 ChatAppPay.QueryOrder
  • user/pay gRPC 超时、不可达、业务错误时的 HTTP 状态码映射

输出顺序要求

请按以下顺序输出实现内容:

  1. 项目目录结构
  2. proto 定义
  3. 配置结构与示例
  4. HTTP API 设计
  5. gRPC client 封装
  6. Go 代码实现
  7. 测试代码
  8. 本地运行说明