7434e5195e
Anonymous callers get a free cumulative quota (1000 calls per IP); once exhausted they get 403 quota_exhausted and must register. Public users can self-register (email+password) to obtain a higher-quota API key, view usage, and regenerate the key. Quota counters live in Redis; the public API stays read-only except for the registration writes. - migration 0011: app_user table + api_key.quota_total + 'registered' tier - ratelimit: IncrTotal/TotalUsed/CopyTotal lifetime counters - middleware: enforce cumulative quota + X-Quota-* headers - store: RegisterUser/Authenticate/RegenerateKey (bcrypt) - handlers: POST /api/v1/register, /account, /account/regenerate - admin: quota_total column + registered tier - public: 'API 密钥' account page + API docs quota section Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Database migrations (golang-migrate)
SQL migrations for the OpenGoods database, applied with
golang-migrate.
Naming: NNNN_description.up.sql / NNNN_description.down.sql.
Files
| Version | Up | 内容 |
|---|---|---|
| 0001 | 0001_init |
扩展(pgcrypto/pg_trgm/ltree) + 全部核心表 + 索引 + tsvector 触发器 |
| 0002 | 0002_seed_units |
单位字典(与 ingestion/opengoods/units.py 一致)+ 常用营养参数定义 |
| 0003 | 0003_seed_categories |
食品品类骨架(GS1 GPC 映射 + 自建中文树)+ 品类参数模板 |
运行
先起本地依赖:docker compose up -d postgres
export DBURL="postgres://opengoods:opengoods@localhost:5432/opengoods?sslmode=disable"
migrate -path migrations -database "$DBURL" up # 升级到最新
migrate -path migrations -database "$DBURL" down -all # 全部回滚
migrate -path migrations -database "$DBURL" version # 查看当前版本
安装 CLI:go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@v4.18.1
ltree 标签为英文 slug(不支持空格/中文),中文名存于
category.name_zh。gpc_brick_code为食品子集的代表值,后续用官方 GPC 全量导入替换。