Files
platforms/docs/操作日志_用户端APP_商品收藏_20260908.md
czl231 3ef33b531d 已完成用户APP首期功能开发
交付用户端首期页面、配套接口、后台资源及测试文档。用户APP构建、静态分析和三个管理后台构建通过;完整测试仍有2项失败,后端模型注释检查未通过,详见交付记录。
2026-09-13 00:57:32 +08:00

67 lines
8.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 商品收藏开发操作日志
操作时间2026-09-08。操作类型新增和扩展。影响模块Go用户Client API、Flutter商城/详情/个人中心、远程收藏表及设计验收记录。
## 操作前状态
已打开最新15-我的收藏原图核对分类计数、收藏卡片、取消收藏、下架保留和加购已阅读03需求及当前商城、购物车、迁移实现。仓库无收藏模型或用户接口商城、详情和个人中心的收藏均是未开放入口。保留已有工作区变更没有重置、提交或执行mock-data。
## 代码变更
| 文件(仓库相对路径) | 职责/位置 | 行数 |
| --- | --- | --- |
| backend/api/internal/models/ec_favorite.go | EcFavorite、唯一账户商品关系、revision | 新增17 |
| backend/api/cmd/cli/favorite_migration.go | migrateEcFavorite单表事务迁移及9字段/表中文注释 | 新增30 |
| backend/api/cmd/cli/main.go | 新增migrate-ec-favorite命令与帮助 | 扩展原CLI |
| backend/api/internal/logic/client/user/favorite.go | 30行FavoriteState、52行SetFavorite、120行ListFavorites | 新增140 |
| backend/api/internal/logic/client/user/favorite_list.go | favoriteRows按页批量关联商品、图片、分类及参数 | 新增81 |
| backend/api/internal/routers/client.go、client_test.go | 3条受保护路由及存在断言 | 扩展用户JWT组 |
| backend/api/internal/logic/client/user/favorite_test.go | 幂等、归档版本、所有权过滤、下架列表白名单及批量关联 | 新增138 |
| apps/user_app/lib/domain/models/product_favorite.dart | ProductFavoriteState和ProductFavorite整数金额/协议校验 | 新增62 |
| apps/user_app/lib/data/repositories/client_repository.dart | 22行favorites、29行favoriteState、setFavorite和确认事件流 | 保留原接口 |
| apps/user_app/lib/data/services/api_client.dart | 116行captureSessionGuard不暴露令牌的会话一致性检查 | 扩展共享HTTP工具 |
| apps/user_app/lib/ui/features/shop/favorite_button.dart | 初始化读取、条件收藏/取消、跨页面状态同步 | 新增152 |
| apps/user_app/lib/ui/features/shop/favorites_page.dart | 分类数量、管理取消、下架条目、加购重试 | 新增338 |
| apps/user_app/lib/ui/features/shop/shop_page.dart、product_detail_page.dart | 替换收藏占位按钮 | 接入共用FavoriteButton |
| apps/user_app/lib/ui/features/profile/profile_page.dart、lib/app/router.dart | 我的收藏入口及/favorites登录守卫 | 保留一级导航 |
| apps/user_app/test/ui/favorites_page_test.dart、test/data/favorite_test.dart | 分类/取消/加购、同步、账号迟到响应、分页契约 | 新增136/126 |
| apps/user_app/test/support/a1_fixture.dart、tool/a1_visual_test.dart | 测试收藏及图15多视口截图 | 测试数据不进入运行入口 |
| scripts/compare-user-app-a1.ps1 | 增加图15并排对照现13组设计图 | 仅差异检查 |
## 服务端行为与迁移
- `GET shop/favorites`沿用page/page_size兼容分页`GET shop/favorites/items/:identity`读取单品收藏状态;`PUT`提交favorite布尔值和读取时的revision。路径相对于`/heqi/client/v1/user`均要求用户JWT。
- 每个账户和商品只有一条关系取消设置status=3收藏status=1下架商品仍在收藏列表不允许新增收藏或加购但可以取消。已收藏的重复true/已取消的重复false无写入。
- revision由收藏公开UUID和正整数版本组成同目标重试不递增真实状态变化才递增。过期条件返回2404不能通过旧请求复活已取消收藏。账户行锁串行写入最多1000条有效收藏。
- 列表只返回商品公开标识、价格、图片、分类及实际参数,不暴露内部主键或其他账户数据。取消收藏不影响购物车和订单。
- 列表资料按当前页批量读取:商品、图片、分类、参数共四次查询,不随页面商品数量增加数据库往返。测试验证两商品主图/规格隔离、原列表顺序和每商品最多两条规格避免N+1远程查询。
- 使用原有远程PostgreSQL配置执行`go run ./cmd/cli migrate-ec-favorite`两次均通过验证定向迁移可重复执行。只新增ec_favorite及约束/注释;没有全库迁移、清库、初始化示例数据或本机数据库/Redis容器。
- ec_favorite是用户私有关系不开放平台通用任意改写入口。资源契约同步与检查通过平台公开资源仍为48个。
## 前端行为
- 游客点击收藏进入登录并保留站内回跳;登录后由用户再次明确点击执行写入。加载失败显示重试图标,未收到成功响应不伪造已收藏。
- 商城和详情共用FavoriteButton仓储广播服务端已确认状态迟到读取不能覆盖已确认的新状态账号切换后旧响应不广播。
- 收藏页按后台真实分类展示数量,下架/缺货显示暂不可售。管理模式支持按当前分类全选后批量取消,失败后重读实际列表,不宣称全部成功。
- 收藏加购沿用购物车条件版本,结果未知时保留原绝对目标,当前页面重试不会再次累加。跨页面重建后的未知请求恢复仍是后续待完善项。
## 自动和远程验证
- Go全量`go test ./...``go vet ./...`、构建通过。定向测试覆盖8种收藏状态写入情形、缺少必填布尔参数和下架商品保留/公开字段。
- 批量读取改动后收藏定向测试、相关包vet和重新构建通过新增双商品四次资料查询的回归测试通过。运行API已切换到包含批量读取的新构建。
- Flutter analyze通过完整84项用户端测试通过布局调整后2项收藏交互测试再次通过。
- 图11/12/15/25在320、360、390、430宽度和1.0、1.3文字缩放下共32项布局检查通过。查看图15的390与320大字体截图后修正分类按钮及价格/加购排列图15的8项复查通过已重新生成并排图。
- Web Release和Android Debug构建通过。本机API12426运行新后端18571提供新Web产物Android测试包API地址为127.0.0.1真机需adb reverse或使用可访问的API地址构建不能仅凭构建通过声称已验收真机。
- 远程HTTP实测商品10收藏版本从`01a07f64-bbc6-7672-b49b-21ef882647b7:1`取消为`:2`重复收藏保留原版本旧请求返回2404分页列表只出现一条该商品。匿名访问HTTP401。接口联调新增收藏已取消归档没有更改商品价格、库存或上下架状态。
- 浏览器390×844实测游客点收藏后跳登录并回商品详情再次点击后显示已收藏。个人中心“我的收藏”打开真实列表显示全部1及对应分类1价格10500分从收藏加购后购物车新增该商品1件合计20800分含原有10300分商品。随后浏览器取消测试收藏HTTP复核收藏为空测试加购条目已归档原购物车仍为原有商品1件且已勾选。本轮没有创建或支付订单。
## 视觉核对与风险
原稿中的蓝色分类按钮、爱心、商品列表和价格/加购结构已按图调整。分类、金额和库存展示真实数据,原图的示例月销量没有后端口径,未编造。商品图片缺失仍显示空态,推荐区和精确素材/间距仍未完成因此图15和全量验收继续failed。当前逐页状态为13张部分实现、45张尚无完整页面、0张通过严格1:1全功能验收。
本轮新增数据库表有外键与唯一约束;后续数据维护必须保留账户隔离和归档事实。批量取消为逐项条件操作,存在局部成功时通过重新加载展示。原生相机/语音及iOS设备仍未在本轮验收Android构建仍提示speech_to_text/tobias未来Kotlin插件兼容警告当前不影响构建。
## 维护指南
后续销量、推荐或优惠应由所属业务服务提供可信数据,不能直接复制设计稿数字。收藏字段、版本和路由变化须更新本日志、项目文档及契约,继续验证重复/过期请求、下架保留、账号切换和分页。数据库部署仅运行定向迁移,不用全库迁移代替。