# 戒烟/抽烟记录 API 所有接口前缀:`/api/v1/smoke` 除登录外都需要:`Authorization: Bearer `(见:`docs/common/auth.md`) ## 1) 新增记录 `POST /api/v1/smoke/logs` 请求体: ```json { "smoke_time": "2025-12-31", "smoke_at": "2025-12-31 08:30:00", "remark": "压力大", "level": 2, "num": 3 } ``` 说明: - `smoke_time` 可选;不传则默认“当天”。 - `smoke_at` 可选;真实抽烟时间(格式 `YYYY-MM-DD HH:MM:SS`)。用于“按时间节点分析/AI 建议”;不传则可用 `createtime` 近似。 - `level/num` 可选;不传或传 `<=0` 时会按 `1` 处理。 curl 示例: ```bash curl -X POST 'http://127.0.0.1:8080/api/v1/smoke/logs' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer wx-session-key' \ -d '{"smoke_time":"2025-12-31","smoke_at":"2025-12-31 08:30:00","remark":"压力大","level":2,"num":3}' ``` 成功响应示例(字段以实际为准): ```json { "code": 200, "message": "success", "data": { "id": 5202, "smoke_time": "2025-12-31T00:00:00+08:00", "smoke_at": "2025-12-31T08:30:00+08:00", "remark": "压力大", "createtime": 1735600000, "updatetime": 1735600000, "deletetime": null, "level": 2, "num": 3 } } ``` ## 2) 获取单条记录 `GET /api/v1/smoke/logs/:id` curl 示例: ```bash curl -X GET 'http://127.0.0.1:8080/api/v1/smoke/logs/5202' \ -H 'Authorization: Bearer wx-session-key' ``` ## 3) 列表查询(分页) `GET /api/v1/smoke/logs?page=1&page_size=20&start=2025-12-01&end=2025-12-31` 参数: - `page`:页码,默认 `1` - `page_size`:每页数量,默认 `20`,最大 `200` - `start/end`:可选,按 `smoke_time` 过滤(格式 `YYYY-MM-DD`) 成功响应示例: ```json { "code": 200, "message": "success", "data": { "items": [], "total": 0, "page": 1, "page_size": 20 } } ``` ## 4) 更新记录 `PUT /api/v1/smoke/logs/:id` 请求体(字段可选,按需传): ```json { "smoke_time": "2026-01-01", "smoke_at": "2026-01-01 21:10:00", "remark": "聚会", "level": 3, "num": 1 } ``` 注意: - 如果你想“清空 smoke_time”,请传空字符串:`{"smoke_time":""}`。 - 如果你想“清空 smoke_at”,请传空字符串:`{"smoke_at":""}`。 - 如果传 `null` 或者不传 `smoke_time`,后端会认为你没有修改该字段。 ## 5) 删除记录(软删除) `DELETE /api/v1/smoke/logs/:id` 成功响应: ```json { "code": 200, "message": "success", "data": { "deleted": true } } ``` ## 6) 获取 AI 戒烟建议(会员 + 广告解锁并行) `GET /api/v1/smoke/ai/advice?date=2026-01-02` 说明: - `date` 可选,默认“昨天”(建议针对哪一天的数据)。 - 权限:会员用户直接可用;非会员需要先对该 `date` 完成“看广告解锁”(见下一个接口)。 - 建议结果会按 `uid + date + prompt_version` 缓存(表:`fa_smoke_ai_advice`)。 未满足权限时的建议响应(示例): ```json { "code": 403, "message": "需要会员或观看广告解锁后才可生成建议", "data": { "date": "2026-01-02", "need": "vip_or_ad" } } ``` 成功响应(示例): ```json { "code": 200, "message": "success", "data": { "date": "2026-01-02", "advice": "..." } } ``` ## 7) 看广告解锁(用于非会员) `POST /api/v1/smoke/ai/advice_unlocks` 请求体: ```json { "date": "2026-01-02", "ad_watched_at": "2026-01-03 09:00:00" } ``` 说明: - 该接口用于记录“已完成观看广告”,落库到 `fa_smoke_ai_advice_unlocks`(`uid + unlock_date` 唯一)。 - `ad_watched_at` 可由后端取当前时间;如需审计/对账可保留前端上报并做校验。