Files
lijiaoqiao/supply-api/README.md
2026-04-13 20:52:53 +08:00

194 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Supply API
> 供应链管理 API 服务
## 项目概述
Supply API 是一个基于 Go 的微服务,提供供应链管理功能,包括:
- **账户管理** - 供应商和消费者账户的 CRUD 操作
- **套餐管理** - 供应链套餐的发布、下架和管理
- **结算服务** - 供应链结算和提现处理
- **收益服务** - 收益记录和账单汇总
- **审计日志** - 完整的审计日志记录和查询
- **IAM (身份和访问管理)** - 多角色权限系统
## 技术栈
- **语言**: Go 1.21+
- **数据库**: PostgreSQL 15+
- **缓存**: Redis
- **框架**: 标准库 + 自定义中间件
- **测试**: Go testing + testify
## 项目结构
```
supply-api/
├── cmd/
│ └── supply-api/ # 主程序入口
│ └── main.go
├── internal/
│ ├── audit/ # 审计日志模块
│ │ ├── model/ # 审计事件模型
│ │ ├── service/ # 审计服务
│ │ ├── handler/ # HTTP 处理器
│ │ ├── repository/ # 数据库仓储 (R-09)
│ │ ├── sanitizer/ # 敏感信息脱敏
│ │ └── events/ # 事件定义 (CRED, SECURITY)
│ ├── iam/ # IAM 模块
│ │ ├── model/ # 角色、权限模型
│ │ ├── service/ # IAM 服务
│ │ ├── handler/ # HTTP 处理器
│ │ ├── middleware/ # 权限中间件
│ │ └── repository/ # 数据库仓储 (R-08)
│ ├── domain/ # 领域模型
│ ├── middleware/ # HTTP 中间件
│ ├── repository/ # 通用数据仓储
│ ├── cache/ # Redis 缓存
│ └── config/ # 配置管理
├── sql/
│ └── postgresql/ # 数据库 DDL 脚本
│ ├── platform_core_schema_v1.sql
│ ├── iam_schema_v1.sql # IAM 表 (R-07)
│ └── supply_idempotency_record_v1.sql
└── scripts/
└── migrate.sh # 数据库迁移脚本
```
## 模块说明
### IAM 模块 (多角色权限)
| 功能 | 说明 |
|------|------|
| 角色管理 | super_admin, org_admin, supply_admin, operator, developer, finops, viewer |
| 权限范围 | 细粒度 scope 权限控制 |
| 角色继承 | 支持角色层级继承 |
| 中间件验证 | ScopeAuth 中间件 |
**文件**:
- `internal/iam/model/` - 角色、权限模型
- `internal/iam/service/` - IAM 服务层
- `internal/iam/middleware/` - 权限验证中间件
### Audit 模块 (审计日志)
| 功能 | 说明 |
|------|------|
| 事件记录 | CRED/AUTH/DATA/SECURITY 事件分类 |
| 幂等性保证 | IdempotencyKey 支持 |
| 敏感信息脱敏 | 自动扫描和掩码 |
| 指标统计 | M-013/M-014/M-015/M-016 |
**文件**:
- `internal/audit/model/` - 审计事件模型
- `internal/audit/service/` - 审计服务
- `internal/audit/handler/` - HTTP API
- `internal/audit/sanitizer/` - 敏感信息脱敏
### Domain 模块
| Store | 说明 |
|-------|------|
| AccountStore | 账户 CRUD |
| PackageStore | 套餐管理 |
| SettlementStore | 结算处理 |
| EarningStore | 收益记录 |
## API 端点
### 审计 API
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | /api/v1/audit/events | 创建审计事件 |
| GET | /api/v1/audit/events | 查询事件列表 |
### IAM API
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | /api/v1/iam/roles | 创建角色 |
| GET | /api/v1/iam/roles | 列出角色 |
| GET | /api/v1/iam/roles/:code | 获取角色详情 |
| PUT | /api/v1/iam/roles/:code | 更新角色 |
| DELETE | /api/v1/iam/roles/:code | 删除角色 |
| POST | /api/v1/iam/roles/:code/scopes | 分配权限 |
| DELETE | /api/v1/iam/roles/:code/scopes/:scope | 移除权限 |
## 配置
配置文件位于 `config/` 目录:
```yaml
# config/config.dev.yaml
database:
host: localhost
port: 5432
user: supply
password: ""
database: supply_db
max_open_conns: 25
max_idle_conns: 5
conn_max_lifetime: 5m
redis:
host: localhost
port: 6379
password: ""
db: 0
```
本机专用配置不要直接写入 `config/config.dev.yaml`。如果需要使用 Unix socket、本机数据库名或本机用户请改用单独的本机覆盖文件
```bash
cp ./config/config.local.example.yaml ./config/config.local.yaml
go run ./cmd/supply-api -env=dev -config ./config/config.local.yaml
```
仓库中的 `config/config.dev.yaml` 保持为可复现样例,`config/config.local.yaml` 只用于本机环境,已加入忽略规则。
## 构建和运行
```bash
# 构建
go build -o supply-api ./cmd/supply-api/
# 运行
./supply-api -env=dev
# 测试
go test ./... -count=1
```
## 测试覆盖率
| 模块 | 覆盖率 |
|------|--------|
| audit/events | 73.5% |
| audit/handler | 83.0% |
| audit/model | 95.0% |
| audit/sanitizer | 79.7% |
| audit/service | 75.3% |
| iam/handler | 85.9% |
| iam/middleware | 83.5% |
| iam/model | 62.9% |
| iam/service | 99.0% |
## 数据库迁移
```bash
# 运行迁移
./scripts/migrate.sh -env=dev
```
## 文档
- [实施状态](./docs/plans/2026-04-03-p1-p2-implementation-status-v1.md)
- [设计文档](./docs/)
## License
Proprietary