Blizzard
|
7a55ee0f2e
|
feat(community): 评论改为独立二级页面 + 评论内容安全审核 + 评论数按实发实时纠正
前端:
- 新增 pages/comments 独立评论页(列表 + 底部输入条 + 回复),社区卡片点评论改为 navigateTo
- 输入条用普通流式布局 + 原生 adjust-position 做键盘避让,聚焦期间不 setData 碰输入框
- 评论只能配 1 张图;底部常驻「审核后公开」提示;发送按钮在途「审核中…」防连点
- 发布结果按状态区分:过审即时展示,其余提示「已提交,审核通过后展示」
- 评论页把已发布评论数回传社区列表,卡片数字实时更新
后端:
- CreateComment 文本判为违规时直接拒收(ErrContentRejected),不入库
- 社区列表/用户帖子列表用「已发布评论实时条数」覆盖 comment_count,
修正异步过审/删待审/后台改状态导致的计数漂移
- IDCard 手机号返回完整号码(上一批遗留)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-03 16:04:21 +08:00 |
|
Blizzard
|
c4c0c2b7cd
|
feat: 生命阶段按猫狗真实生理规律细分,划分标准和判定用同一份数据
## 你问的「养了半年会不会自动切换」
原来的答案是「都不会,而且比这更糟」:
age「2个月」 建档时算好存进库,养半年后首页还显示 2个月
stage「幼年期」同上,一年后还是幼年期
养护方案 按 stage 挑的,所以永远给幼猫那套
NormalizeStage 只在建档那一次调用(handler/pet.go:51),之后就是两个死字符串。
现在:
age 改成计算字段(gorm:"-"),读取时现算。它没有手改需求,存下来只会过期。
填在 ownedPet 这个收口里,不是逐个函数补——那样漏一个就返回空年龄。
stage 保留存储(有正当的手改需求:领养的猫生日是估的,主人按体型判断更准),
但加了漂移检测 GET /pets/:id/stage-drift。
**系统负责发现,用户负责决定。** 不自动改的三个理由:
1. 用户可能手改过
2. 已经排好的这个月计划不该被推翻(套用是「往里加」不是「替换」)
3. 偷偷换会让用户莫名发现计划变了,找不到原因
## 猫狗不能共用阈值 —— 这是这次最实质的发现
原来一刀切「<12月幼年,>=7岁老年」,对猫勉强,对狗两头都错:
吉娃娃 8 个月已性成熟、可换成犬粮;大丹犬 8 个月还在长骨头,
这时喂成犬粮(钙磷比和热量密度都不同)会加重关节负担。
吉娃娃 7 岁还在成年期(8 岁才进中年,能活 13-16 年);
大丹犬 7 岁已是老年(平均寿命 7-10 年)。
所以狗的阶段判定要看体型。体型不能靠当前体重(幼犬体重说明不了成年后多大),
只能靠品种 —— breeds 表加 size_class,45 个犬种逐个标了。
实测:同样 10 个月大 → 吉娃娃青年期、柴犬幼年期、金毛幼年期、大丹犬幼年期;
同样 7 岁 → 吉娃娃成年期、大丹犬老年期。
## 阶段 3 段 → 5 段
幼年期 / 青年期 / 成年期 / 中年期 / 老年期。
标签做成物种中立(不分幼猫期/幼犬期)——物种本来是另一个字段,
分开会让 (species,stage) 的组合和方案配置都翻倍。
「刚到家 0-30 天」不进这五段:它和年龄正交(刚接回家的成年猫两套都需要),
代码里本来就是叠加处理的。
猫按 AAFP/AAHA 猫生命阶段指南那套,在成年里细分出中年。
狗五段的阈值按体型走四组,越大的犬种生长期越长、老得越早。
## 划分标准和判定用同一张表
StageRules 那张表既驱动判定,也直接吐给前端当依据展示
(GET /api/life-stages?species=dog&size=giant)。
不是「代码里判定 + 文档里写标准」——后者一定会漂:改了阈值忘了改文档,
用户看到的说明和实际行为对不上,比没有说明更糟。
建档第三步的阶段选择器现在会显示「0-18 月 · 巨型犬生长期最长,18 个月还在长;
这阶段最忌过度补钙」,还会标出「巨型犬(成年 >40kg)——阶段阈值按体型算」。
前端和后台的 STAGES 硬编码列表都删了,改成读后端。
## 10 套方案,内容按各阶段真实重点配
不是把同一份换个名字:
幼年期 疫苗序列 + 驱虫 + 社会化,大型犬还要控制生长速度
青年期 绝育窗口 + 换成年粮
成年期 维持期,把基线数据记下来
中年期 年度血检开始有意义,体重和牙结石重点看
老年期 体检半年一次;猫记饮水量(多饮多尿是慢性肾病最典型的早期表现)、
狗记精神食欲,都设成「重要」
老的 8 套(按 3 段配的)改名停用不删:万一新内容有问题还能翻回去看;
而且已套用出去的计划早就和模板断开了,停用不影响任何用户。
## 验证(预生产库实跑)
体型判定 10 个月 / 7 岁两组对照,四个体型都落在预期阶段
age '13个月' 现算,不入库
漂移检测 手改成幼年期后 drifted=true,连带给出新阶段的依据和重点
划分标准 猫 5 段、狗 4 个体型各 5 段,老年起点 7/8/10/11 岁
全链路 3 个月大丹犬建档 → 幼年期 → 0 任务 + 4 条必要提醒 →
挑「幼犬标准照护」→ 套用下月 104 条节点,
周四那天正确出现每周项(检查爪垫和耳朵)
迁移 45 个犬种体型回填;现有 5 只宠物阶段重算后无变化(原本都对)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-07-30 12:51:10 +08:00 |
|
Blizzard
|
8606c1dfc8
|
feat(be): Phase C —— 个人主页装扮 + 养宠数据
## User 加四个装扮字段
bio / bg_file_id / theme / hide_pets。
hide_pets 存的是「隐藏」而不是「展示」,为的是零值即默认:AutoMigrate
给存量行填 0,正好等于「展示宠物墙」,不用给老用户跑一次刷值。对外
API 仍然用 show_pets(UI 上是个「展示我的宠物」开关,正着说更自然),
只在 handler 边界取一次反。
theme 存 key 不存色值。色值属于前端表现层,存进库以后想调色就得改数据;
存 key 还能保证前端只渲染已知的那几种。非法 key 走 40000,老用户的空
theme 在读取时兜底成 warm,前端不会拿空 key 去查表。
## GET /users/:id/profile 扩展
原来只有昵称头像和三个计数,现在带上 bio / bg_url / theme / show_pets
+ 宠物名片墙 + 养宠数据。自己看和别人看走同一个接口,省得两套渲染慢慢长歪。
## 养宠数据
days 养宠天数,按最早那只的建档日算——这里要表达的是「你在这照顾它
多久了」,不是宠物活了多久
records 累计记录条数
act_days 有记录的天数
streak 连续打卡
streak 有个必须处理的边界:今天还没记录不能算断签,否则用户每天早上打开
都会看到连续天数归零。实现是先看今天有没有记,没有就从昨天起往回数。
## PUT /api/user/decoration
四个字段全用指针,区分「没传」和「传了空串」——清空个性签名和不改个性
签名是两件事。bio 服务端截到 60 字。
联调验证(本地 9090):
老用户读取 theme 兜底 warm、bio ''、hide_pets false
改装扮 theme=mint、bio 落库
theme=rainbow 40000 参数不合法
bio 100 字 截断到 60
show_pets false → pets 字段消失,stats.pet_count 仍为 1
别人视角 is_self=false、followed=false、装扮和宠物墙都能看到
streak 1/2/3/5 天前各记一条:act_days=4 streak=3(第 4 天空档正确断开)
今天再补一条:act_days=5 streak=4
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-07-29 17:54:16 +08:00 |
|
Blizzard
|
2e3345cdfc
|
feat: 记录删除与筛选、用户侧内容删除、AI 聊天历史
修复雪花 ID 精度丢失(真 bug)
- bottom-sheet 的 postId 声明为 Number,而 ID 是 18 位雪花字符串,
超出 JS 安全整数范围:339346584095428608 会被转成 ...600,
评论弹层实际查的是不存在的帖子。改为 String
记录
- 后端 DELETE /records/:id 早已就绪但前端从未调用,记错了删不掉。
时间轴支持长按删除
- 时间轴加类型筛选(体重/便便/饮食/异常/用药/疫苗/消费/照片),
后端 ?type= 本就支持
用户侧内容删除(UGC 合规:用户应能删除自己发布的内容)
- 新增 DELETE /posts/:id 与 DELETE /comments/:id,仅限本人,
越权返回 40300;帖子软删除,评论删除同步递减 comment_count
- 评论列表返回 is_self;社区长按自己的帖子、长按自己的评论可删
AI 聊天历史
- ai_messages 一直在写但没有查询接口,每次打开弹层都是空白。
新增 GET /api/ai/messages,弹层打开时接在开场白后加载
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-07-28 17:42:14 +08:00 |
|
Blizzard
|
77beb9ca96
|
fix(pro): 会员改为「即将开放」,堵住点一下白拿会员的漏洞
原先 /api/pro/activate 直接写库开通一年会员,没有任何支付校验,
任何人调一次接口就是会员。支付暂不接入,这里必须在服务端拒绝,
只改 UI 挡不住直接调接口。
- ActivatePro 一律返回 ErrPayNotReady;真正写库的逻辑保留为
activateProAfterPaid,等接微信支付时在校验支付单据后调用
- handler 对该错误返回参数错而非 500,前端直接展示提示文案
- 小程序 Pro 弹层按钮置灰为「即将开放」,我的页入口改为
「Pro 会员(即将开放)」
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-07-25 18:15:38 +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 |
|