feat: 统一顺运宝日期同步并记录历史 (#59)
This commit is contained in:
+39
-4
@@ -264,7 +264,7 @@ var migrations = [][]string{
|
||||
// 背景见 #20:v1 曾经被原地改写而不是新增版本,导致已经建过库的机器
|
||||
// (user_version 已经越过 v1)永远不会重跑改写后的语句,程序拿着一个
|
||||
// 和代码对不上的库静默启动。
|
||||
const schemaVersion = 7
|
||||
const schemaVersion = 8
|
||||
|
||||
// migrationV4 给 PDD 商品增加店铺名。
|
||||
//
|
||||
@@ -353,6 +353,32 @@ var migrationV7 = []string{
|
||||
ON client_user_assignments(client_id, started_at DESC);`,
|
||||
}
|
||||
|
||||
// migrationV8 持久化顺运宝同步记录,见工单 #59。
|
||||
// 只新增表和索引,不修改 v1-v7 的任何已发布语句。
|
||||
var migrationV8 = []string{
|
||||
`CREATE TABLE syb_sync_runs (
|
||||
run_id TEXT PRIMARY KEY,
|
||||
user_id TEXT NOT NULL,
|
||||
date_from TEXT NOT NULL,
|
||||
date_to TEXT NOT NULL,
|
||||
status TEXT NOT NULL CHECK (status IN ('running', 'succeeded', 'failed', 'interrupted')),
|
||||
stock_count INTEGER NOT NULL DEFAULT 0,
|
||||
detail_count INTEGER NOT NULL DEFAULT 0,
|
||||
created_count INTEGER NOT NULL DEFAULT 0,
|
||||
updated_count INTEGER NOT NULL DEFAULT 0,
|
||||
skipped_count INTEGER NOT NULL DEFAULT 0,
|
||||
error_message TEXT,
|
||||
cursor_advanced INTEGER NOT NULL DEFAULT 0 CHECK (cursor_advanced IN (0, 1)),
|
||||
started_at TEXT NOT NULL,
|
||||
finished_at TEXT,
|
||||
FOREIGN KEY (user_id) REFERENCES users(user_id),
|
||||
CHECK ((status = 'running' AND finished_at IS NULL)
|
||||
OR (status <> 'running' AND finished_at IS NOT NULL))
|
||||
);`,
|
||||
`CREATE INDEX idx_syb_sync_runs_started
|
||||
ON syb_sync_runs(started_at DESC, run_id DESC);`,
|
||||
}
|
||||
|
||||
// Migrate 把数据库升到最新版本。
|
||||
// 已经是最新的就什么都不做,可以重复调用。
|
||||
func Migrate(db *sql.DB) error {
|
||||
@@ -431,6 +457,14 @@ func Migrate(db *sql.DB) error {
|
||||
if err := runSQLMigration(db, 7, migrationV7); err != nil {
|
||||
return err
|
||||
}
|
||||
reached = 7
|
||||
}
|
||||
|
||||
// v8 只新增顺运宝同步记录表和倒序索引。
|
||||
if reached < 8 {
|
||||
if err := runSQLMigration(db, 8, migrationV8); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -892,7 +926,7 @@ var requiredTables = []string{
|
||||
"syb_orders", "sku_mappings", "tasks", "clients",
|
||||
"idempotency_keys", "task_claims",
|
||||
"syb_session", "syb_sync_state",
|
||||
"users", "web_sessions", "client_user_assignments",
|
||||
"users", "web_sessions", "client_user_assignments", "syb_sync_runs",
|
||||
}
|
||||
|
||||
// requiredColumns 只列出不能靠“表存在”发现的关键追加列。
|
||||
@@ -900,8 +934,9 @@ var requiredTables = []string{
|
||||
// 查询对应页面会直接失败,因此启动时就应给出明确错误,
|
||||
// 而不是等操作员点到页面才暴露。
|
||||
var requiredColumns = map[string][]string{
|
||||
"pdd_products": {"shop_name"},
|
||||
"syb_orders": {"product_spec"},
|
||||
"pdd_products": {"shop_name"},
|
||||
"syb_orders": {"product_spec"},
|
||||
"syb_sync_runs": {"user_id", "date_from", "date_to", "status", "cursor_advanced", "started_at", "finished_at"},
|
||||
}
|
||||
|
||||
// CheckSchema 在 Migrate 成功后调用,确认代码依赖的表都在。
|
||||
|
||||
Reference in New Issue
Block a user