Blizzard
|
8b1b4cde02
|
refactor(be): 今日任务并进计划节点,养护方案改成可选、按重复规则配
## 三个问题,一起解决
你问「模版要不要做成可选」,摸下来发现底下有三个更硬的:
**① 根本没有多套模版可选。** 模板表唯一索引是 (species, stage) ——
同一个「猫 × 幼年期」只能有一套。「让用户选模版」在数据模型上做不到。
去掉唯一索引,加 Name / Summary / Sort / Enabled。
**② 今日任务和计划节点是两套,而且是我上一轮改出来的。**
DailyTask 模板 kind=task 生成,ensureDayTasks 每天把昨天那份复制到今天
PlanTask 模板 kind=plan 生成,Day 偏移
计划改成月度管理 + 加了「应用到每天」之后,两者做的是同一件事,
但首页读 DailyTask、计划页管 PlanTask —— 用户在计划页加一条「每天喂药」,
首页今日任务里看不到。
DailyTask 退役。task.go 重写成 PlanTask 的一层「按日期取」的门面,
/pets/:id/tasks 路径不变,小程序端不用为这次合并改调用。
PlanTask 加 Priority(首页那份要能标出哪条重要)。
顺手删掉重复的 CreateTask/UpdateTask/DeleteTask —— /plan-tasks 那套已经
覆盖了,留着两套会出现「首页管理弹层加的任务」和「计划页加的节点」进不同的表。
**③ 模板的 Day 偏移和月度计划对不上。** 月底建档的话 day=14/21/30 全落到
下个月,用户建完档打开计划页发现本月是空的。
改成重复规则:once(偏移 N 天,疫苗序列要用)/ daily / weekly(星期几)
/ monthly(几号)。套用 = 展开成目标月份的具体日期。
「每月 31 号」在 2 月按月末算,不然那个月直接没有。
列名用 repeat_rule 不用 repeat —— repeat 是 MySQL 保留字(和 group_key 同理)。
## 展开成实体行,不是「存规则读时展开」
勾选状态是按天的。存规则得再开一张表记「哪天打过勾」,而且用户把
「每周二梳毛」这周挪到周三就要引入例外记录。一次展开成行,增删改和打勾全免费。
代价是套用后模板和计划断开:后台改模板不影响已套用的宠物。这是有意的——
用户已经在自己的计划上勾了几十个勾,后台一改就被覆盖才是灾难。
## 建档不再自动铺
seedPetDefaults 只建必要提醒(疫苗、驱虫)。漏针是真会出事的,而且它们是
「到期提醒」不占计划页的格子。其余交给用户挑方案。
自动铺的问题是:用户还没看懂这个 App 是干什么的,首页已经躺着十几条他没
答应过的任务,第一反应是「这些是什么」而不是「我该做什么」。
**改完发现还有第二条自动铺的路径**:newStagePlan 在建计划壳子时顺手把模板
铺成节点。所以我改完 seedPetDefaults 之后,建档后首页仍然躺着 5 条任务。
惰性生成尤其难查——不是建档时发生的,是第一次读计划才发生的。
## 方案摘要按重复方式分开报数
一开始只报一个总数,「10 条」套用一整月展开成 130 条,用户会以为出 bug。
现在分成 每天 4 · 每周 0 · 每月 0 · 一次性 6 · 提醒 4。
## 数据迁移(预生产库,已执行)
模板明细 kind=task → plan + repeat=daily 28 条
模板明细 kind=plan 补 repeat=once 44 条
8 套方案补名字和摘要
DailyTask → PlanTask 34 条,跳过 0
DailyTask 表的行**没删**,先留着当备份。
迁移第一版又踩了「列还没 AutoMigrate 出来就跑」那个坑:Count 静默返回 0,
我以为「没有需要补的」。第二版加了 HasColumn 前置检查才发现 44 条没转。
和上次 record_types.fields 回填是同一个错。
## 验证(预生产库实跑)
今日任务/计划页今天 4 条 vs 4 条,一致
建档后 0 任务 / 0 计划节点 / 4 条必要提醒
套用本月 从今天到月末,4 条(7/30-7/31 两天)
重复套用 0 条新增(按「日期+标题」去重)
套用下月 130 条覆盖 31 天,每天 4.2 条
全部完成 5 → 0 未做
## 还没做(下一步)
前端:建档第 4 步选方案、计划页空月份的套用入口、首页「管理」改跳计划页、
弹层删 manageTasks;后台模板页要支持多套 + 重复规则编辑。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-07-30 11:50:54 +08:00 |
|
Blizzard
|
7acdf916d5
|
refactor(be): 养护模板也从代码里移出,只从数据库读
和文章同一个理由:模板是运营内容,不是代码。留一套内置默认还额外带来
一个坏处——库里配的和代码里写的会悄悄分叉,出问题时分不清用户拿到的
到底是哪一套。
删掉:
- builtinCat / builtinDog / builtinCareItems(8 套 × 96 条)
- SeedCareTemplates(启动时写内置默认)
- ResetCareTemplate + 后台「恢复默认」按钮 —— 已经没有默认可恢复
careTemplateItems 现在查不到就返回空。这意味着后台把某个组合配空了,
新用户会拿到一个什么都没有的首页而且不报错,所以 seedPetDefaults 里
加了一条 log:模板为空时打出 species/stage/petID,否则没人能发现。
「AI 生成草稿」原来在 AI 未开启或调用失败时静默返回内置默认,看起来
像是 AI 生成的。现在直接报错说清原因,让管理员知道要么开 AI 要么手填。
数据在库里,删代码不影响:预生产 8 套 96 条原样在,建档端到端复测通过
(3 月龄幼猫仍拿到「下一针疫苗·21 天后」,成年犬仍有疫苗驱虫提醒)。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-07-29 13:59:11 +08:00 |
|
Blizzard
|
d9d7e128ff
|
feat: 引导页阶段按生日推断 + 8 套养护模板按临床共识重配
## 引导页三个逻辑漏洞
1. **阶段和生日脱节**:用户填了 3 个月的生日,却能手选「成年期」,
而阶段决定疫苗针次、驱虫周期和每天要做的事,选错整套计划都是偏的。
现在按生日自动推断(猫狗同:12 月龄成年、7 岁进老年),仍可手改,
但改成矛盾值时会弹框说明代价;服务端 NormalizeStage 兜底。
2. **`goals` 是假选择**:6 个勾选框收上来只存进 pets.goals,一处没用过。
现在真正生效:体重提醒、月度报告按勾选生成,勾了「想控制养宠开销」
会多一条记账任务。疫苗和驱虫不给关——狂犬是法定要求,漏驱虫真会出事。
3. **「刚到家 0-30 天」和年龄阶段互斥**:挤在一个四选一里,刚接回家的
成年猫只能二选一。现在拆开:stage 只存年龄阶段,新增 pets.arrived_at,
到家不满 30 天时把安置期那套任务和计划叠加上去(同标题去重)。
顺带:生日/到家日期不能选未来(前后端各拦一道)、体重范围校验。
## 疫苗提醒改为按月龄算
原来不管多大都排「14 天后首针」,一只 8 月龄才接回家的猫会被安排去打首免。
现在 dueDaysFor 按真实月龄推:<2 月龄等到 8 周龄、2-5 月龄间隔 21 天、
5-12 月龄两周内补齐、成年走年度加强。标题也跟着改写,否则用户照着
「年度疫苗加强」去打错针。
年度疫苗不再编一个假的到期日(原来写 30 天后),改用频率描述。
## 8 套模板按临床共识重配
依据 WSAVA 疫苗指南、ESCCAP/CAPC 驱虫建议、AAHA 生命阶段指南整理:
猫三联 3 针间隔 3-4 周末针不早于 16 周龄、犬联苗 2-3 针 + 3 月龄狂犬、
体内驱虫 6 月龄前每月一次之后每 3 个月、幼崽 3-6 月龄每天 3-4 餐、
成年犬每天 2 次共 30-60 分钟遛狗、老年建议半年一次体检。
每套从 11 条扩到 10-14 条,描述写成能直接照做的具体动作。
后台新增「恢复默认」:启动 seed 改为只补缺失、不覆盖已有(管理员可能
改过),内置模板更新后必须从后台显式推一次。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-07-29 11:58:00 +08:00 |
|
Blizzard
|
2f5dd6eefc
|
feat: 养护模板/社区运营/体重趋势/计划日历 + 雪花ID重构 + 文件表与图片上传
后端
- 主键改雪花字符串 ID(pkg/idgen + Base.BeforeCreate),全表外键/JWT/中间件随之调整
- 新增 files 表:/api/upload 按 MD5 去重,返回 {id,url,md5},服务端只收图片
- 头像/记录附图/帖子图改 file_id 关联,读取解析为 URL
- 养护模板(物种×阶段)后台可配 + AI 生成草稿;建档按模板生成任务/计划/提醒
- 社区 AI 运营:虚拟账号池 + 每日定时/手动生成,帖子带 AI 标
- 计划路线图节点带真实日期;首页周历与计划日历同源;新增 day-plan 当日安排
- 体重趋势接口带备注;记录列表分页
小程序
- 公共图片上传 utils/upload.js(仅图片);记录拍照/我的头像/社区发图三处接入
- 首页日历点选查当日任务;记录页体重趋势可点看备注 + 时间轴分页折叠
- 计划页日历点选查当日计划;自定义 tabBar 高度调整
后台(React)
- 新增「养护模板」「社区运营」页;用户管理加机器人筛选
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-07-06 08:48:15 +08:00 |
|
Blizzard
|
609f7d06cf
|
init: 毛孩子计划 小程序 + Go 后端 + 内嵌后台
- pets-fe: 微信原生小程序(首页/计划/记录/报告/社区/引导),
服务端驱动、无假数据;弹层改用 scroll-view,打开时隐藏自定义 tabBar
- pets-be: Gin + GORM(MySQL, sundynix_ 前缀) + MinIO,统一响应/分页,
微信 code2session 登录,provider-neutral AI(DeepSeek),go:embed React 后台
- 修复:分段选择类型不匹配(字符串 vs 数字)导致选不中
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-07-03 15:36:55 +08:00 |
|