实现界面上的「店铺下拉」和「下载数据」两个功能,让商品真正出现在列表里。 这是 MVP1 的最后一块。
接口都有真实抓包可对照,见负责人提供的 payloads/huohanhan_product.har (已 gitignore,不要提交):
payloads/huohanhan_product.har
erp/shop/all
type=1
product/shop/getPage
product/shop/getCount
getPage 最小请求体:
getPage
{"size":20,"current":1,"itemStatus":"NORMAL","platform":"0", "platformShopId":"","sortField":"updateTime","sortType":"desc"}
界面四个筛选条件到接口参数的映射(已确认,不要另造): 店铺 → platformShopId;蝦皮ID → itemIds;创建时间 → createTimeStart/createTimeEnd; 状态 → itemStatus。
platformShopId
itemIds
createTimeStart
createTimeEnd
itemStatus
响应 records[] 关键字段:id(货憨憨记录 ID,是后续写操作的关联键, 不是 itemId)、itemId(Shopee 商品 ID)、itemName、mainImage、 shopName、platformShopId、currency、minSkuPrice、itemStatus、createTime。
records[]
id
itemId
itemName
mainImage
shopName
currency
minSkuPrice
createTime
ListShops
DownloadProductData
getCount
internal/huohanhan/shop.go
shop_test.go
internal/huohanhan/product.go
product_test.go
app.go
frontend/src/views/ProductListView.vue
UpsertProducts
go vet ./... go test ./internal/huohanhan/...
真实店铺验证由负责人在界面操作确认。
本工单由本机 Codex CLI(模型 gpt-5.6-sol)实施,由 Claude 审核。
gpt-5.6-sol
Codex 必须遵守:
AGENTS.md
main.go
internal/
go test
go vet ./...
go build ./...
go test ./...
docs/
状态:进行中(Codex gpt-5.6-sol,--yolo,Claude 审核)
--yolo
我逐条读了负责人提供的 payloads/huohanhan_product.har,发现真实请求与 D:\chengma\hhh_api 的 Python 实现及其接口文档有三处不一致。已在提示词中 明确要求以抓包为准,不要照抄 Python。
D:\chengma\hhh_api
shop_service.py
userId=
product_query_service.py
json=body
application/x-www-form-urlencoded;charset=UTF-8
{type, bean}
接口文档说「所有接口统一返回 {type, message, code, bean, extension}」, 但这两个接口实测都不是:
{type, message, code, bean, extension}
{records, total, size, current, orders, searchCount, pages}
另外 total/size/current/pages 在实测响应里可能是字符串也可能是数字, 解析必须兼容两种。
total
size
current
pages
erp/shop/all 返回的每个店铺对象里带有:
accessToken
refreshToken
createUser
已在提示词中列为红线:Go 结构体只允许包含界面需要的 8 个字段 (id、shopName、shopAlias、region、regionName、platform、platformShopId、status), 不得解析、记录、存储或返回 token 与手机号,并要求写测试断言结构体不含 token 字段。
platformShopId=1664202094
因此要求 DownloadProductData 必须接收店铺 ID 参数,未选店铺时报 「请先选择店铺」,不默认拉全部——19 个店铺全拉会非常慢。 同时要求分页上限保护(最多 200 页),防止 pages 异常导致死循环。
records[] 共 52 个字段,本工单只取以下 10 个(均已在抓包中确认存在): id、itemId、itemName、mainImage、shopName、platformShopId、 currency、minSkuPrice、itemStatus、createTime。
id 是货憨憨内部记录 ID,itemId 是 Shopee 商品 ID,两者不可混用, 落库主键必须用 id。
No dependencies set.
The note is not visible to the blocked user.
基本信息
依赖与并行
要解决什么
实现界面上的「店铺下拉」和「下载数据」两个功能,让商品真正出现在列表里。
这是 MVP1 的最后一块。
接口都有真实抓包可对照,见负责人提供的
payloads/huohanhan_product.har(已 gitignore,不要提交):
erp/shop/all,formtype=1product/shop/getPageproduct/shop/getCountgetPage最小请求体:界面四个筛选条件到接口参数的映射(已确认,不要另造):
店铺 →
platformShopId;蝦皮ID →itemIds;创建时间 →createTimeStart/createTimeEnd;状态 →
itemStatus。响应
records[]关键字段:id(货憨憨记录 ID,是后续写操作的关联键,不是
itemId)、itemId(Shopee 商品 ID)、itemName、mainImage、shopName、platformShopId、currency、minSkuPrice、itemStatus、createTime。做什么 / 不做什么
ListShops真实实现;DownloadProductData分页拉全量并 upsert 进 SQLite;进度通过 logx 输出;界面店铺下拉改为真实数据。
getCount(暂时用不到);不做增量同步,每次全量 upsert。预计修改文件
internal/huohanhan/shop.go、shop_test.gointernal/huohanhan/product.go、product_test.goapp.go(ListShops、DownloadProductData 换成真实实现)frontend/src/views/ProductListView.vue(去掉店铺加载失败时的静默处理)验收标准
UpsertProducts已保证,要有测试)验证方式
真实店铺验证由负责人在界面操作确认。
交给 Codex 实施的约定
本工单由本机 Codex CLI(模型
gpt-5.6-sol)实施,由 Claude 审核。Codex 必须遵守:
AGENTS.md,第 10 节「项目专用规则」是不可违反的红线。main.go和app.go;internal/不许 import wails。go test覆盖;不能联网的部分用假数据测,不要写需要真实账号才能跑的测试。go vet ./...、go build ./...、go test ./...。docs/下的任何文件(那是 Wiki 镜像)。状态:进行中(Codex
gpt-5.6-sol,--yolo,Claude 审核)实施前从真实 HAR 核对出的三处矛盾
我逐条读了负责人提供的
payloads/huohanhan_product.har,发现真实请求与D:\chengma\hhh_api的 Python 实现及其接口文档有三处不一致。已在提示词中明确要求以抓包为准,不要照抄 Python。
矛盾一:
erp/shop/all的请求参数shop_service.py与接口文档type=1userId=(值为空)矛盾二:
getPage的编码方式product_query_service.pyjson=body(JSON)application/x-www-form-urlencoded;charset=UTF-8矛盾三:响应没有
{type, bean}包裹接口文档说「所有接口统一返回
{type, message, code, bean, extension}」,但这两个接口实测都不是:
erp/shop/all直接返回裸 JSON 数组(该账号 19 个店铺)getPage直接返回{records, total, size, current, orders, searchCount, pages}另外
total/size/current/pages在实测响应里可能是字符串也可能是数字,解析必须兼容两种。
安全问题:店铺响应含真实凭据
erp/shop/all返回的每个店铺对象里带有:accessToken—— Shopee OAuth 令牌refreshToken—— Shopee OAuth 刷新令牌createUser—— 手机号,属于真实个人数据已在提示词中列为红线:Go 结构体只允许包含界面需要的 8 个字段
(id、shopName、shopAlias、region、regionName、platform、platformShopId、status),
不得解析、记录、存储或返回 token 与手机号,并要求写测试断言结构体不含 token 字段。
实测数据规模
platformShopId=1664202094有 1256 个商品,63 页因此要求
DownloadProductData必须接收店铺 ID 参数,未选店铺时报「请先选择店铺」,不默认拉全部——19 个店铺全拉会非常慢。
同时要求分页上限保护(最多 200 页),防止
pages异常导致死循环。已确认可直接使用的字段
records[]共 52 个字段,本工单只取以下 10 个(均已在抓包中确认存在):id、itemId、itemName、mainImage、shopName、platformShopId、currency、minSkuPrice、itemStatus、createTime。id是货憨憨内部记录 ID,itemId是 Shopee 商品 ID,两者不可混用,落库主键必须用
id。