67 lines
8.0 KiB
Markdown
67 lines
8.0 KiB
Markdown
# 商品收藏开发操作日志
|
||
|
||
操作时间: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插件兼容警告,当前不影响构建。
|
||
|
||
## 维护指南
|
||
|
||
后续销量、推荐或优惠应由所属业务服务提供可信数据,不能直接复制设计稿数字。收藏字段、版本和路由变化须更新本日志、项目文档及契约,继续验证重复/过期请求、下架保留、账号切换和分页。数据库部署仅运行定向迁移,不用全库迁移代替。
|