Просмотр исходного кода

docs: 新增接口文档(docs/06) + PRD 改日期制变更记录

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
tianyu.chu 1 месяц назад
Родитель
Сommit
b1f91051a0
3 измененных файлов с 122 добавлено и 8 удалено
  1. 4 0
      CHANGELOG.md
  2. 10 8
      docs/01-产品需求-MVP.md
  3. 108 0
      docs/06-接口文档.md

+ 4 - 0
CHANGELOG.md

@@ -4,7 +4,11 @@
 
 
 ## 2026-06-25
 ## 2026-06-25
 
 
+### 新增
+- **`docs/06-接口文档`**:面向调用方的 API 参考——端点、请求/响应字段与约束、`data_status`(ready/missing)、422 错误场景、各周期 curl 示例。
+
 ### 变更
 ### 变更
+- **PRD 改日期制变更记录**:`docs/01` 去掉 v1/v2 语义版本号(MVP 快迭期不适用),改为「阶段:MVP 开发中(未发布)+ 按日期记变更」,补全 06-24/06-25 的迭代(三级 IA → 拼团两表 → IA 精简 5 域 → 平台更名)。
 - **文档对齐现状(清 v1 残留)**:几次 pivot(bitmap→拼团两表、AntD→shadcn、四态→两态)后,周边文档段没回头清。本次对齐:
 - **文档对齐现状(清 v1 残留)**:几次 pivot(bitmap→拼团两表、AntD→shadcn、四态→两态)后,周边文档段没回头清。本次对齐:
   - `docs/02` §3/§4(前端/后端职责)、§7(性能)、§8(测试):由 bitmap / 15 天自定义范围 / Ant Design / 步骤参数 → **拼团两表 + shadcn + ready/missing + period 取列**。
   - `docs/02` §3/§4(前端/后端职责)、§7(性能)、§8(测试):由 bitmap / 15 天自定义范围 / Ant Design / 步骤参数 → **拼团两表 + shadcn + ready/missing + period 取列**。
   - `docs/05` §5/§6(前后端 agent)、§7(数据状态):同步到两表 + shadcn + 两态。
   - `docs/05` §5/§6(前后端 agent)、§7(数据状态):同步到两表 + shadcn + 两态。

+ 10 - 8
docs/01-产品需求-MVP.md

@@ -6,16 +6,18 @@
 
 
 | 项 | 内容 |
 | 项 | 内容 |
 |----|----|
 |----|----|
-| 文档版本 | v2.0 |
-| 文档状态 | 评审中 |
-| 更新日期 | 2026-06-24 |
+| 阶段 | **MVP 开发中(未发布)** |
+| 更新日期 | 2026-06-25 |
 
 
-## 修订记录
+> MVP 快速迭代期不打语义版本号(v1/v2),**按日期记变更**(与 `CHANGELOG.md` 一致);真正上线到 `release` 后再切正式版本。
 
 
-| 版本 | 日期 | 修订内容 |
-|------|------|----------|
-| v1.0 | 2026-06-21 | 初版:5 扁平能力域 + 泛用 UV 漏斗 MVP |
-| v2.0 | 2026-06-24 | 重构为多形态一站式平台的**三级信息架构**;MVP 改为拼团漏斗(固定);漏斗详规对齐已上线实况 |
+## 修订记录(按日期)
+
+| 日期 | 变更 |
+|------|------|
+| 2026-06-21 | 初版:5 个扁平能力域 + 泛用 UV 漏斗设想(bitmap 方案) |
+| 2026-06-24 | 重构为**三级信息架构**(初版 7 个 L1);MVP 改为**拼团固定漏斗**(预聚合两表),漏斗详规对齐实现;前端栈 Ant Design → shadcn/ui |
+| 2026-06-25 | **IA 精简定稿为 5 个 L1**(行为分析 / 指标体系 / 画像体系 / 数据看板 / 营销触达):多实体画像、实时并入看板、去数据管理/工作台门面、导航展开折叠;**平台更名「数据服务平台」→「数据平台」**(数据服务一词留给将来 API 层)+ 命名约定;文档全量对齐现状 |
 
 
 ---
 ---
 
 

+ 108 - 0
docs/06-接口文档.md

@@ -0,0 +1,108 @@
+# 接口文档
+
+> hs-data 后端对外接口参考。契约唯一来源是 `docs/02-技术架构` §5;本文是面向调用方的完整说明。
+> 机读:后端运行时 `GET /openapi.json` 与 Swagger UI `/docs`;前端 TS 类型见 `packages/api-types`。
+
+| 项 | 内容 |
+|----|----|
+| 阶段 | MVP 开发中(未发布) |
+| 更新日期 | 2026-06-25 |
+| Base URL(本地) | `http://localhost:8000` |
+| 鉴权 | MVP 暂无(内网访问);对外开放前需加鉴权,见 `docs/01` §7 |
+
+## 1. 健康检查
+
+```text
+GET /health
+```
+返回 `200`,不依赖数据库。用于探活。
+
+---
+
+## 2. 拼团漏斗查询
+
+```text
+POST /api/funnels/query
+Content-Type: application/json
+```
+
+固定 5 步拼团漏斗:**启动 `start` → 曝光 `show` → 拼团详情 `detail` → 下单 `order` → 成功 `paid`**。数据 **T+1**,最大可查日为昨日。
+
+### 2.1 请求
+
+| 字段 | 类型 | 必填 | 说明 |
+|----|----|----|----|
+| `period` | string 枚举 | 是 | `day`(单日)/ `last_7d` / `last_30d`。非法值 → 422 |
+| `snapshot_dt` | string `YYYY-MM-DD` | 否 | **仅 `day` 有效**:指定历史某日;省略=最新(昨日)。**上限昨日**,今天/未来 → 422。`last_7d`/`last_30d` 忽略此字段 |
+
+```json
+{ "period": "day", "snapshot_dt": "2026-06-20" }
+```
+
+### 2.2 响应 `200`
+
+| 字段 | 类型 | 说明 |
+|----|----|----|
+| `period` | string | 回显请求周期 |
+| `snapshot_dt` | string `yyyyMMdd` \| null | 实际取数那行的 `dt`;单日=该日,近 7/30 天=rolling 的 as-of 日;`missing` 时为 `null` |
+| `results` | array(5) | 固定 5 步,见下 |
+| `data_status` | string 枚举 | `ready` / `missing` |
+
+`results[]` 每项:
+
+| 字段 | 类型 | 说明 |
+|----|----|----|
+| `step_index` | int | 从 1 开始 |
+| `name` | string | 中文步骤名(启动/曝光/拼团详情/下单/成功) |
+| `event_key` | string | 稳定 key(start/show/detail/order/paid) |
+| `uv` | int | 该步骤独立用户数 |
+| `conversion_rate` | float \| null | `uv[i]/uv[i-1]`;**第 1 步为 `null`**;`uv[i-1]==0` 时为 `null` |
+| `dropoff_rate` | float \| null | `1 - conversion_rate`;同上为 `null` |
+
+```json
+{
+  "period": "day",
+  "snapshot_dt": "20260620",
+  "results": [
+    { "step_index": 1, "name": "启动",     "event_key": "start",  "uv": 10000, "conversion_rate": null, "dropoff_rate": null },
+    { "step_index": 2, "name": "曝光",     "event_key": "show",   "uv": 8200,  "conversion_rate": 0.82, "dropoff_rate": 0.18 },
+    { "step_index": 3, "name": "拼团详情", "event_key": "detail", "uv": 5100,  "conversion_rate": 0.62, "dropoff_rate": 0.38 },
+    { "step_index": 4, "name": "下单",     "event_key": "order",  "uv": 2200,  "conversion_rate": 0.43, "dropoff_rate": 0.57 },
+    { "step_index": 5, "name": "成功",     "event_key": "paid",   "uv": 1800,  "conversion_rate": 0.82, "dropoff_rate": 0.18 }
+  ],
+  "data_status": "ready"
+}
+```
+
+### 2.3 数据状态
+
+| 值 | 含义 |
+|----|----|
+| `ready` | 目标行存在且对应列非空,正常返回 |
+| `missing` | 目标行不存在或对应列为空。**不补零**:`results` 为空、`snapshot_dt` 为 `null` |
+
+### 2.4 错误 `422`
+
+请求不合法时返回 `422`(FastAPI 标准校验错误体,`detail` 含原因):
+
+- `period` 缺失或非枚举值。
+- `period=day` 且 `snapshot_dt` 为今天或未来(数据 T+1,最大昨日)。
+
+### 2.5 取数说明(实现)
+
+- `day` → 读 `ads_trd_group_funnel_daily`:给 `snapshot_dt` 取该行,否则取最新 `dt`。
+- `last_7d` / `last_30d` → 读 `ads_trd_group_funnel_rolling` 唯一行的 `*_7d` / `*_30d` 列。
+- 不读 bitmap、不跨天聚合。表结构见 `docs/03` §11。
+
+### 2.6 示例
+
+```bash
+# 默认单日(最新=昨日)
+curl -X POST http://localhost:8000/api/funnels/query -H 'Content-Type: application/json' -d '{"period":"day"}'
+# 历史某日
+curl ... -d '{"period":"day","snapshot_dt":"2026-06-18"}'
+# 近 7 天
+curl ... -d '{"period":"last_7d"}'
+# 今天 → 422
+curl ... -d '{"period":"day","snapshot_dt":"2026-06-25"}'
+```