docs(02-01): 完成 PERM+FIN+POLL 9项修复计划 PERM-01/02 FIN-01/02/03 POLL-01/02/03/04

This commit is contained in:
2026-03-28 10:46:10 +08:00
parent 754bbcdf3b
commit e1ec024904
18 changed files with 5548 additions and 28 deletions

177
.planning/codebase/STACK.md Normal file
View File

@@ -0,0 +1,177 @@
# Technology Stack
**Analysis Date:** 2026-03-27
## Languages
**Primary:**
- Go 1.25.x - 应用代码、API、Worker、OpenAPI 生成和基础设施脚本,依据 `go.mod``cmd/api/main.go``cmd/worker/main.go``cmd/gendocs/main.go`
**Secondary:**
- YAML - 配置与部署编排,见 `pkg/config/defaults/config.yaml``docker-compose.prod.yml``.gitea/workflows/deploy.yaml`
- Dockerfile - API/Worker 容器构建,见 `Dockerfile.api``Dockerfile.worker`
- Makefile - 本地构建、文档生成、迁移命令,见 `Makefile`
## Runtime
**Environment:**
- Go runtimeAPI 服务基于 Fiber HTTP 服务器,见 `cmd/api/main.go`
- 独立 Worker 进程处理异步任务与调度,见 `cmd/worker/main.go`
- 生产容器基础镜像为 Alpine构建镜像使用 Go 1.25.6 Alpine`Dockerfile.api``Dockerfile.worker`
**Package Manager:**
- Go Modules`go.mod`
- Lockfile: `go.sum` present
## Frameworks
**Core:**
- Fiber v2.52.9 - HTTP 框架与路由宿主,见 `go.mod``cmd/api/main.go`
- GORM v1.31.1 + `gorm.io/driver/postgres` v1.6.0 - PostgreSQL ORM 与连接层,见 `go.mod``pkg/database/postgres.go`
- Viper v1.21.0 - 嵌入式默认配置 + 环境变量覆盖,见 `go.mod``pkg/config/loader.go`
**Queue / Scheduling:**
- Asynq v0.25.1 - 任务提交、Worker 消费、定时任务,见 `go.mod``pkg/queue/client.go``pkg/queue/server.go``cmd/worker/main.go`
**Serialization / Validation:**
- sonic v1.14.2 - Fiber JSON 编解码与任务载荷序列化,见 `go.mod``cmd/api/main.go``pkg/queue/client.go`
- validator/v10 v10.28.0 - DTO 校验依赖,见 `go.mod`
**Logging:**
- zap v1.27.1 - 应用日志与 SQL 日志,见 `go.mod``pkg/logger/logger.go``pkg/database/postgres.go`
- lumberjack.v2 v2.2.1 - 日志轮转,见 `go.mod``pkg/logger/logger.go`
**Docs tooling:**
- swaggest/openapi-go v0.2.60 - OpenAPI 3.0.3 文档生成,见 `go.mod``pkg/openapi/generator.go`
## Build / Dev / Deploy
**Build:**
- `Makefile` 定义 `build``run``run-worker``docs``migrate-*` 目标,见 `Makefile`
- API 与 Worker 使用多阶段 Docker 构建,编译产物分别来自 `./cmd/api``./cmd/worker`,见 `Dockerfile.api``Dockerfile.worker`
**Deploy:**
- 生产编排使用 Docker Compose运行 `api``worker` 两个服务,见 `docker-compose.prod.yml`
- Gitea Actions 工作流构建镜像、推送私有镜像仓库并在主分支执行 `docker compose up -d`,见 `.gitea/workflows/deploy.yaml`
**Docs generation:**
- API 启动时会生成 `logs/openapi.yaml`,见 `cmd/api/main.go``cmd/api/docs.go`
- 手动文档命令 `make docs` 运行 `cmd/gendocs/main.go`,输出 `docs/admin-openapi.yaml`,见 `Makefile``cmd/gendocs/main.go`
## Storage, Data, Messaging
**Database:**
- PostgreSQL 是唯一检测到的主数据库连接、连接池、GORM logger、Ping 校验位于 `pkg/database/postgres.go`
**Cache / KV:**
- Redis 用于认证、缓存、队列后端、限流存储和配置缓存,见 `pkg/database/redis.go``cmd/api/main.go``internal/service/wechat_config/service.go`
**Messaging / Queue:**
- Asynq 直接复用 Redis 连接配置作为消息后端,见 `pkg/queue/client.go``pkg/queue/server.go`
- Worker 内注册订单超时、告警检查、数据清理等调度任务,见 `cmd/worker/main.go`
**Object storage:**
- S3 兼容对象存储通过 AWS SDK v1 实现,支持上传、下载、预签名 URL、临时文件下载`pkg/storage/s3.go``pkg/storage/service.go`
## Configuration
**Loading model:**
- 默认配置从嵌入文件 `pkg/config/defaults/config.yaml` 读取,见 `pkg/config/embedded.go`
- 运行时使用 `JUNHONG_` 前缀环境变量覆盖,见 `pkg/config/loader.go`
- 必填配置校验包括数据库、Redis、JWT`pkg/config/config.go`
**Key config areas:**
- 服务与超时:`server.*`,见 `pkg/config/config.go`
- PostgreSQL`database.*`,见 `pkg/config/config.go`
- Redis`redis.*`,见 `pkg/config/config.go`
- Asynq`queue.*`,见 `pkg/config/config.go`
- 日志:`logging.*`,见 `pkg/config/config.go`
- 短信:`sms.*`,见 `pkg/config/config.go`
- 对象存储:`storage.*`,见 `pkg/config/config.go`
- 外部 Gateway`gateway.*`,见 `pkg/config/config.go`
**WeChat config exception:**
- 微信公众号/小程序/支付配置不走 Viper 主配置,业务侧从数据库表 `tb_wechat_config` 读取并缓存到 Redis`internal/model/wechat_config.go``internal/service/wechat_config/service.go``pkg/wechat/config.go`
## Logging & Observability
**Application logs:**
- `pkg/logger/logger.go` 初始化 app/access 双 logger生产模式写 JSON开发模式 app logger 同时输出控制台
**Access logs:**
- `pkg/logger/middleware.go` 记录 method、path、query、status、duration、request_id、ip、user_agent、user_id、请求/响应 body
**SQL logs:**
- `pkg/database/postgres.go` 自定义 GORM logger记录错误、慢查询和普通 SQL trace
**Health checks:**
- `Dockerfile.api``docker-compose.prod.yml` 均通过 `GET /health` 做容器健康检查
## Notable Dependencies
**HTTP / App:**
- `github.com/gofiber/fiber/v2` - API 服务核心框架,见 `go.mod``cmd/api/main.go`
- `github.com/google/uuid` - 请求 ID 生成,见 `cmd/api/main.go`
**Persistence / Cache:**
- `gorm.io/gorm``gorm.io/driver/postgres` - ORM 与 PostgreSQL 驱动,见 `go.mod``pkg/database/postgres.go`
- `github.com/redis/go-redis/v9` - Redis 客户端,见 `go.mod``pkg/database/redis.go`
**Queue / Async:**
- `github.com/hibiken/asynq` - 队列与调度器,见 `go.mod``pkg/queue/*.go``cmd/worker/main.go`
**Serialization / File processing:**
- `github.com/bytedance/sonic` - JSON 编解码,见 `cmd/api/main.go``pkg/queue/client.go`
- `github.com/xuri/excelize/v2` - Excel 导入处理依赖,见 `go.mod`; 任务消费方在 `internal/task/iot_card_import.go``internal/task/device_import.go` 调用 Excel 解析
**External SDKs:**
- `github.com/ArtisanCloud/PowerWeChat/v3` - 微信公众号与微信支付 SDK`go.mod``pkg/wechat/official_account.go``pkg/wechat/payment.go`
- `github.com/aws/aws-sdk-go` - S3 兼容对象存储客户端,见 `go.mod``pkg/storage/s3.go`
## Platform Requirements
**Development:**
- 需要 PostgreSQL、Redis、JWT 密钥与 `JUNHONG_` 环境变量;`config.Load()` 在启动时强校验,见 `pkg/config/config.go`
- `make docs` 需要 Go 环境;`migrate-*` 目标需要系统安装 `migrate` 命令,见 `Makefile`
**Production:**
- 目标运行形态是 Docker 化 API + Worker 双进程部署,见 `Dockerfile.api``Dockerfile.worker``docker-compose.prod.yml`
- 镜像发布到私有仓库 `registry.boss160.cn`,见 `.gitea/workflows/deploy.yaml`
## Evidence
- `go.mod`
- `README.md`
- `cmd/api/main.go`
- `cmd/api/docs.go`
- `cmd/worker/main.go`
- `cmd/gendocs/main.go`
- `pkg/config/config.go`
- `pkg/config/loader.go`
- `pkg/config/embedded.go`
- `pkg/config/defaults/config.yaml`
- `pkg/database/postgres.go`
- `pkg/database/redis.go`
- `pkg/queue/client.go`
- `pkg/queue/server.go`
- `pkg/queue/handler.go`
- `pkg/logger/logger.go`
- `pkg/logger/middleware.go`
- `pkg/openapi/generator.go`
- `pkg/openapi/handlers.go`
- `pkg/storage/s3.go`
- `pkg/storage/service.go`
- `pkg/wechat/config.go`
- `pkg/wechat/official_account.go`
- `pkg/wechat/payment.go`
- `pkg/sms/client.go`
- `internal/gateway/client.go`
- `Makefile`
- `Dockerfile.api`
- `Dockerfile.worker`
- `docker-compose.prod.yml`
- `.gitea/workflows/deploy.yaml`
---
*Stack analysis: 2026-03-27*