# API / 数据 / 隐私边界规则

本规则适用于任一任务触碰后端 controller/service/entity/repository、`frontend/src/api`、报告 token、媒体 URL、手机号、门店数据范围或发布配置。

> **本体对齐**：本规则的边界约束与 `docs/ontology/rules.md` 的规则条目对齐：
> - 公开报告字段裁剪 → `rule:BR-RPT-006`
> - 公开门店字段裁剪 → `rule:BR-STORE-003`
> - 跨店/跨用户 403 → `rule:BR-APPT-002`/`rule:BR-APPT-003`/`rule:BR-RPT-005`/`rule:BR-LEAD-003`/`rule:BR-SCH-001`/`rule:BR-ST-001`/`rule:BR-PET-001`
> - session token 鉴权 → `rule:BR-AUTH-001`
> - token hash 日志 → `rule:BR-RPT-007`
> - 留资脱敏 → `rule:BR-LEAD-002`
> 改动这些规则时同步更新 `docs/ontology/rules.md` + `graph/ontology.jsonl`。

## 归属边界

| 领域 | Owner Agent | 典型路径 |
|---|---|---|
| 预约、日程、门店、用户、宠物、服务类型 | Backend Core | `Appointment*`、`Schedule*`、`Store*`、`User*`、`Pet*`、`ServiceType*` |
| 报告、媒体、成片、留资、评价 | Report Media Backend | `Report*`、`FileController`、`ReportHighlightVideoService` |
| 门店端页面调用 | Store Miniapp FE | `frontend/src/pages/home`、`appointment`、`report`、`mine` |
| 宠主公开体验调用 | Customer Experience FE | `frontend/src/pages/report-view`、`video-player`、宠主预约页、公开分享 utils |
| 表结构、索引、状态字段、幂等 | Data Model | JPA entity、repository query、数据说明文档 |

## Controller / Service 规则

- Controller 只做入口、参数校验、登录/上下文读取和响应映射。
- Service 承载领域规则：状态机、数据范围、幂等、权限判断、异步任务状态。
- 不要在 Controller 中直接拼复杂业务状态或绕过 Service 改库。
- 任何状态更新都必须校验前置状态；预约状态不得直接无条件赋值。
- 公开报告接口必须只返回公开页需要的字段，不得透出调试字段、内部权限字段或不必要手机号。

## Frontend API 规则

- 新增或修改 API 时，优先在 `frontend/src/api/index.js` 或对应业务 utils 中统一封装。
- 页面不直接散落硬编码 URL、token 拼接或错误码判断。
- 前端错误态必须有用户可理解文案；不能展示后端堆栈、SQL、Java exception 或未翻译错误。
- H5 与小程序若共享报告语义，字段名、三态文案和重试行为必须一致。

## Data / Privacy 规则

- `report_token` 是敏感公开链接，不在日志、报告、截图中展示完整值。
- 手机号、宠主留资、门店数据范围和媒体 URL 必须有最小化返回原则。
- 软删除字段、`store_id` 数据范围和状态字段变更必须通过 Data Model review。
- 成片任务需要记录任务状态、失败原因和用户可读映射；不能只依赖日志排查。

## 变更清单

接口或数据变更的任务 brief 必须写清：

- 受影响 endpoint / 前端调用点。
- 请求参数和响应字段变化。
- 错误码或业务码变化。
- 数据表 / entity / repository query 变化。
- 是否影响公开访问、report token、手机号、媒体 URL、门店数据范围。
- 必跑验证命令和手工验收路径。

## 推荐验证

后端：

```bash
cd /Users/apple/_src/petstore/backend
mvn test
```

前端：

```bash
cd /Users/apple/_src/petstore/frontend
npm run build:h5
npm run build:mp-weixin
```

文档：

```bash
git -C /Users/apple/_src/petstore/docs diff --check
rg -n "report_token|手机号|状态机|预约|成片" /Users/apple/_src/petstore/docs
```

本体（改了 controller/service/entity 后必跑）：

```bash
cd /Users/apple/_src/petstore
python3 docs/graph/validate_ontology.py docs   # 引用完整性
python3 docs/graph/audit_drift.py              # 本体—代码漂移审计
```

期望：`validate_ontology` 通过 + `audit_drift` 无 code-only / ontology-only 漂移。
