Files
wx_service/docs/smoke
nepiedg 9200600b1c Enhance smoking tracking API with new features and improvements
- Added a new API endpoint `GET /api/v1/smoke/home` to consolidate core modules for the home dashboard, reducing the need for multiple requests.
- Updated the `smoke` routes to include the new home endpoint and improved user profile management with the addition of a `quit_date` field.
- Enhanced the algorithm for calculating daily targets and next smoke suggestions, ensuring accurate future time handling and user-specific recommendations.
- Improved API documentation to reflect new endpoints, response formats, and detailed field descriptions for better clarity and usability.
- Refactored user authentication handling in various handlers to streamline the process and ensure consistent error responses.
2026-01-29 17:16:35 +00:00
..

戒烟/抽烟记录小程序

本小程序用于记录抽烟情况(日期、原因、烟瘾程度、数量等)。

产品与流程文档

  • 产品说明(PRD):docs/smoke/PRODUCT.md
  • 算法与 AI 策略:docs/smoke/ALGORITHM.md

依赖

  • 公共登录与认证:docs/common/auth.md
  • 通用响应结构:docs/common/response.md

数据表

主表:fa_smoke_logDDL 见:docs/sql/smoke.sql)。

说明:

  • 该表使用旧系统字段:createtime/updatetime/deletetime(秒级时间戳),并非 GORM 默认的 created_at/updated_at/deleted_at
  • 接口层通过 Token 识别用户,uid 由后端从登录用户推导,不允许前端传入。

用户基础信息(首次进入补全)

用于建立“初始基准/个性化策略”的用户信息表:

  • fa_smoke_user_profileDDL 见:docs/sql/smoke.sql

典型字段:

  • 日均抽烟支数、烟龄、单包价格
  • 抽烟动机、戒烟动力
  • 起床/入睡时间(用于规避睡眠时间)

真实抽烟时间(推荐使用 smoke_at

为支持“按时间节点分析”(例如:昨天哪些时段更容易想抽),建议在 fa_smoke_log 中新增:

  • smoke_at:真实抽烟时间(精确到时分秒,可补录)

数据约定建议:

  • 前端若提供了真实时间:写入 smoke_at;并同步写 smoke_time = date(smoke_at),方便沿用现有按天筛选。
  • 前端未提供真实时间:smoke_at=NULL,时间节点可用 createtime 作为近似(但补录会造成偏差)。

AI 戒烟建议(会员 + 广告解锁并行)

面向会员用户提供“昨日 AI 建议”;非会员用户在完成当日/指定日期的“看广告解锁”后也可生成建议。

涉及表(DDL 见:docs/sql/smoke.sql):

  • fa_smoke_ai_advice:按 uid + advice_date + prompt_version 缓存建议结果,避免重复调用 AI。
  • fa_smoke_ai_advice_unlocks:非会员用户的“每日解锁”记录(按 uid + unlock_date 唯一)。
  • fa_smoke_ai_next_smoke:保存“AI 下次抽烟时间节点”(每个时间点一条记录),AI 元信息复用 fa_smoke_ai_advicetype=next_smoke_time)。

建议的权限判断顺序:

  1. 若用户是会员:直接允许生成/获取建议。
  2. 否则:查询 fa_smoke_ai_advice_unlocks 是否已对 unlock_date=昨天(或请求 date 解锁;已解锁则允许。
  3. 否则:拒绝并提示“开通会员或观看广告解锁”。

会员判断建议使用通用会员表:

  • user_membershipsDDL 见:docs/sql/users.sql

无支付系统时,可用兑换码开通会员:

  • APIdocs/membership/API.md
  • DDLdocs/sql/membership.sql

给 AI 的输入(最小必需)建议包含:

  • 昨日总量:SUM(num)
  • 时间节点列表:按 COALESCE(smoke_at, FROM_UNIXTIME(createtime)) 排序的多条记录(每条带 num/level/remark