feat(admin): 新增 /api/import/bypos 导入接口(修复采集器导入失败) #33

Merged
lixu merged 1 commits from devin/1782307670-bypos-import-endpoint into main 2026-06-24 21:33:03 +08:00
Owner

背景

采集器(bypos-collector)的「④ 导入到 Goods 系统」功能会把 JSONL 数据 POST 到后台 /api/import/bypos,但该后端接口此前只存在于未合并分支 b08495b,生产没有,导致后台返回 404 文本页,浏览器 JSON.parse 报「unexpected character at line 1 column 1」。

改动

b08495b 引入两份后端文件并注册路由(纯新增,不改动既有代码/接口):

  • api/internal/adminstore/import_bypos.go:ByposRecord 解析 + 事务化批量 upsert(按 GTIN ON CONFLICT),写入 manufacturer / MSRP / product_barcode / product_source 溯源,并按记录重算质量分;仅导入 status=hit 且有名称的记录。
  • api/internal/adminhandler/import_bypos.go:ImportBypos 处理器,流式解析 NDJSON,返回 {loaded, skipped, errored},空请求返回 400。
  • handler.go:在鉴权路由组注册 POST /api/import/bypos

本地验证(临时 Postgres,迁移至 v13)

  • 登录取 token → POST 样例 JSONL(2 条 hit + 1 条 miss)→ 返回 {"loaded":2,"skipped":1,"errored":0}
  • 落库正确:product(GTIN/名称/属性)、manufacturer、country_of_origin(69 前缀→中国)、product_msrp(CNY)、product_barcode(EAN13)、source(bypos中心库)。
  • 重复导入幂等(仍 2 条);空 body 返回 400;go build ./...go vetgofmt 全部通过。
## 背景 采集器(bypos-collector)的「④ 导入到 Goods 系统」功能会把 JSONL 数据 POST 到后台 `/api/import/bypos`,但该后端接口此前只存在于未合并分支 b08495b,生产没有,导致后台返回 404 文本页,浏览器 `JSON.parse` 报「unexpected character at line 1 column 1」。 ## 改动 从 b08495b 引入两份后端文件并注册路由(纯新增,不改动既有代码/接口): - `api/internal/adminstore/import_bypos.go`:`ByposRecord` 解析 + 事务化批量 upsert(按 GTIN `ON CONFLICT`),写入 manufacturer / MSRP / product_barcode / product_source 溯源,并按记录重算质量分;仅导入 `status=hit` 且有名称的记录。 - `api/internal/adminhandler/import_bypos.go`:`ImportBypos` 处理器,流式解析 NDJSON,返回 `{loaded, skipped, errored}`,空请求返回 400。 - `handler.go`:在鉴权路由组注册 `POST /api/import/bypos`。 ## 本地验证(临时 Postgres,迁移至 v13) - 登录取 token → POST 样例 JSONL(2 条 hit + 1 条 miss)→ 返回 `{"loaded":2,"skipped":1,"errored":0}`。 - 落库正确:product(GTIN/名称/属性)、manufacturer、country_of_origin(69 前缀→中国)、product_msrp(CNY)、product_barcode(EAN13)、source(bypos中心库)。 - 重复导入幂等(仍 2 条);空 body 返回 400;`go build ./...`、`go vet`、`gofmt` 全部通过。
lixu added 1 commit 2026-06-24 21:31:00 +08:00
feat(admin): add /api/import/bypos endpoint for bypos-collector import
CI / Go (api) (pull_request) Successful in 58s
CI / Python (ingestion) (pull_request) Successful in 16s
CI / Migrations (postgres) (pull_request) Successful in 27s
85c58fbd52
Brings the bypos JSONL import backend (handler + store) into main so the
bypos-collector tool's import feature works end-to-end. Records are upserted
on GTIN with manufacturer/MSRP/barcode/source provenance, quality recomputed
per product. Only status=hit records with a name are imported.

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
lixu merged commit 0da57a2fb3 into main 2026-06-24 21:33:03 +08:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: lixu/goods#33