# 套餐接口文档索引

本目录包含套餐（Package/PackageSeries）相关接口的完整代码结构分析文档。

## 📚 文档清单

### 1. 📋 [完整结构分析](./package_structure_summary.md)
**用途**：全面了解套餐接口的代码结构

**包含内容**：
- Model 层文件位置和结构
- DTO 层请求/响应定义
- Handler 层方法列表
- Service 层业务逻辑
- Store 层数据访问
- API 路由注册
- 关键字段详解（duration_days）
- 业务逻辑关键点
- 数据库表结构
- 完整请求/响应示例

**适合场景**：
- 需要全面了解套餐接口架构
- 查看具体的代码位置和行号
- 理解业务逻辑和校验规则

---

### 2. 🎯 [快速导航指南](./package_quick_navigation.md)
**用途**：快速定位需要的代码

**包含内容**：
- 按功能快速查找表
- 按字段快速查找表
- 按 API 端点快速查找表
- 关键代码片段
- 数据流向图
- 常见操作指南
- 相关模块链接

**适合场景**：
- 需要快速找到某个字段或方法
- 想了解数据流向
- 需要修改或扩展功能

---

### 3. 🏗️ [架构详细图](./package_architecture_diagram.md)
**用途**：可视化理解系统架构

**包含内容**：
- 整体架构流程图
- 分层详细结构（Handler/Service/Store）
- 数据模型关系图
- 请求流程示例
- 代理用户查询流程
- 字段验证流程

**适合场景**：
- 需要理解系统整体架构
- 想了解数据流向和处理过程
- 需要设计新功能时参考

---

## 🔍 快速查找

### 按需求查找

| 需求 | 文档 | 位置 |
|------|------|------|
| 查看套餐数据模型 | 完整结构分析 | 第 1 节 |
| 查看 API 请求/响应结构 | 完整结构分析 | 第 2 节 |
| 查看 HTTP 处理器 | 完整结构分析 | 第 3 节 |
| 查看业务逻辑 | 完整结构分析 | 第 4 节 |
| 查看数据访问 | 完整结构分析 | 第 5 节 |
| 快速定位代码 | 快速导航指南 | 第 1-2 节 |
| 理解数据流向 | 快速导航指南 | 第 3 节 |
| 了解系统架构 | 架构详细图 | 第 1-2 节 |
| 查看请求流程 | 架构详细图 | 第 4-5 节 |

### 按文件查找

| 文件 | 说明 | 文档 |
|------|------|------|
| `internal/model/package.go` | 数据模型 | 完整结构分析 1.1 |
| `internal/model/dto/package_dto.go` | DTO 定义 | 完整结构分析 1.2 |
| `internal/handler/admin/package.go` | HTTP 处理 | 完整结构分析 1.3 |
| `internal/service/package/service.go` | 业务逻辑 | 完整结构分析 1.4 |
| `internal/store/postgres/package_store.go` | 数据访问 | 完整结构分析 1.5 |
| `internal/routes/package.go` | 路由注册 | 完整结构分析 2.2 |
| `internal/routes/admin.go` | 路由入口 | 完整结构分析 2.1 |

### 按字段查找

| 字段 | Model 位置 | DTO 位置 | 文档 |
|------|-----------|---------|------|
| `duration_days` | package.go:46 | package_dto.go:96 | 完整结构分析 3.1 |
| `calendar_type` | package.go:45 | package_dto.go:95 | 完整结构分析 3.1 |
| `duration_months` | package.go:37 | package_dto.go:79 | 完整结构分析 3.1 |
| `real_data_mb` | package.go:38 | package_dto.go:80 | 完整结构分析 3.1 |
| `virtual_data_mb` | package.go:39 | package_dto.go:81 | 完整结构分析 3.1 |

---

## 🔑 关键信息速查

### duration_days 字段

**定义位置**：
- Model: `internal/model/package.go:46`
- DTO: `internal/model/dto/package_dto.go:96`

**用途**：
- 当 `calendar_type = "by_day"` 时必填
- 用于按天计算套餐有效期

**验证规则**：
- 范围：1-3650 天
- 当 `calendar_type = "by_day"` 时必须提供

**相关校验**：
- Service 层校验：`internal/service/package/service.go:65-80`

---

### API 端点总览

| 方法 | 路径 | 处理器 | 说明 |
|------|------|--------|------|
| GET | `/packages` | `List()` | 套餐列表 |
| POST | `/packages` | `Create()` | 创建套餐 |
| GET | `/packages/:id` | `Get()` | 获取详情 |
| PUT | `/packages/:id` | `Update()` | 更新套餐 |
| DELETE | `/packages/:id` | `Delete()` | 删除套餐 |
| PATCH | `/packages/:id/status` | `UpdateStatus()` | 更新状态 |
| PATCH | `/packages/:id/shelf` | `UpdateShelfStatus()` | 更新上架状态 |
| PATCH | `/packages/:id/retail-price` | `UpdateRetailPrice()` | 更新零售价 |

**路由注册**：
- 文件：`internal/routes/package.go:11-78`
- 入口：`internal/routes/admin.go:71-78`

---

### 关键业务逻辑

#### 1. 虚流量配置校验
**位置**：`internal/service/package/service.go:51-63`

规则：
- 启用虚流量时，虚流量额度必须 > 0
- 虚流量额度不能大于真流量额度

#### 2. 套餐周期类型校验
**位置**：`internal/service/package/service.go:65-80`

规则：
- `natural_month`：必须提供 `duration_months`
- `by_day`：必须提供 `duration_days`

#### 3. 代理用户套餐过滤
**位置**：`internal/store/postgres/package_store.go:57-66`

规则：
- 代理用户只能看到已分配的套餐
- 通过 INNER JOIN `tb_shop_package_allocation` 实现

---

## 📊 数据库表

### 主要表

| 表名 | 说明 | 文档 |
|------|------|------|
| `tb_package` | 套餐表 | 完整结构分析 6.1 |
| `tb_package_series` | 套餐系列表 | 完整结构分析 6.2 |
| `tb_package_usage` | 套餐使用表 | 架构详细图 3 |
| `tb_package_usage_daily_record` | 日记录表 | 架构详细图 3 |
| `tb_shop_package_allocation` | 套餐分配表 | 架构详细图 3 |

---

## 🛠️ 常见操作

### 添加新的套餐字段

1. **Model 层**：修改 `internal/model/package.go` 的 `Package` 结构体
2. **DTO 层**：修改 `internal/model/dto/package_dto.go` 的相关 Request/Response
3. **Service 层**：修改 `internal/service/package/service.go` 的业务逻辑
4. **Store 层**：修改 `internal/store/postgres/package_store.go` 的查询条件
5. **数据库**：添加数据库迁移

详见：快速导航指南 第 4 节

### 修改套餐 API 响应

1. 修改 `PackageResponse` 结构体（`package_dto.go:71-99`）
2. 修改 Service 的转换逻辑
3. 测试 API 端点

详见：快速导航指南 第 4 节

### 添加新的套餐 API 端点

1. 在 `PackageHandler` 中添加方法
2. 在 `PackageService` 中添加业务逻辑
3. 在 `registerPackageRoutes()` 中注册路由

详见：快速导航指南 第 4 节

---

## 📝 相关文档

- **套餐系统升级**：`docs/package-system-upgrade/`
- **套餐与佣金业务模型**：`docs/commission-package-model.md`
- **API 文档生成规范**：`docs/api-documentation-guide.md`

---

## 🔗 相关模块

| 模块 | 说明 | 文件 |
|------|------|------|
| **PackageSeries** | 套餐系列管理 | `internal/routes/package_series.go` |
| **PackageUsage** | 套餐使用记录 | `internal/routes/package_usage.go` |
| **ShopPackageAllocation** | 套餐分配给代理 | `internal/store/postgres/shop_package_allocation_store.go` |
| **ShopSeriesAllocation** | 系列分配给代理 | `internal/store/postgres/shop_series_allocation_store.go` |

---

## 💡 使用建议

1. **首次了解**：先读 [架构详细图](./package_architecture_diagram.md)，理解整体流程
2. **深入学习**：再读 [完整结构分析](./package_structure_summary.md)，了解具体实现
3. **快速查找**：使用 [快速导航指南](./package_quick_navigation.md)，定位具体代码
4. **修改代码**：参考 [快速导航指南](./package_quick_navigation.md) 的常见操作部分

---

**最后更新**：2025-04-10
**文档版本**：1.0
