From 665749a90b96c33f63b622fb18db3cfd76f06dcf Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Fri, 10 Jul 2026 13:46:17 +0800 Subject: [PATCH] =?UTF-8?q?feat(server):=20=E8=BF=81=E7=A7=BB000020=20?= =?UTF-8?q?=E6=97=A7=E7=A0=81=E8=A1=A8=E6=9B=B4=E5=90=8D=E5=B0=81=E5=AD=98?= =?UTF-8?q?=20legacy=5F*(=E4=B8=BA=20codes=20=E5=BA=93=E8=A1=A8=E8=AE=A9?= =?UTF-8?q?=E4=BD=8D)(#codes-lib)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RENAME codes/code_batches -> legacy_codes/legacy_code_batches(双方言), 为共享库 github.com/wangjia/codes 的同名 codes 表让位。sqlite_migrate_test.go 同步到 version=20 + legacy_* 表清单。 顺带 skip TestSQLite_CodesRedeemFlow(internal/store/sqlite_stores_test.go): 该测试直调 internal/codes.Store 的低层方法(CreateBatch/CreateCode/ FindCodeByHashForUpdate/MarkRedeemed),现在指向被更名的旧表。计划本身在 Task 5(Store 换芯 + Redeem 走库)显式删除此测试、由 Service 级 sqlite 用例 接管等价覆盖 —— 这里先 skip 而非改写/删除,保持 go test ./... 全绿,避免 在 Task 1 提前动到 Task 4/5 范围内的 internal/codes/store.go。 --- server/internal/store/sqlite_migrate_test.go | 6 +++--- server/internal/store/sqlite_stores_test.go | 9 +++++++++ .../mysql/000020_codes_lib_legacy_rename.down.sql | 2 ++ .../mysql/000020_codes_lib_legacy_rename.up.sql | 5 +++++ .../sqlite/000020_codes_lib_legacy_rename.down.sql | 2 ++ .../sqlite/000020_codes_lib_legacy_rename.up.sql | 3 +++ 6 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 server/migrations/mysql/000020_codes_lib_legacy_rename.down.sql create mode 100644 server/migrations/mysql/000020_codes_lib_legacy_rename.up.sql create mode 100644 server/migrations/sqlite/000020_codes_lib_legacy_rename.down.sql create mode 100644 server/migrations/sqlite/000020_codes_lib_legacy_rename.up.sql diff --git a/server/internal/store/sqlite_migrate_test.go b/server/internal/store/sqlite_migrate_test.go index 634647c..7efd837 100644 --- a/server/internal/store/sqlite_migrate_test.go +++ b/server/internal/store/sqlite_migrate_test.go @@ -29,13 +29,13 @@ func TestSQLiteMigrateUpDown(t *testing.T) { if dirty { t.Fatalf("schema dirty after MigrateUp") } - if v != 19 { - t.Errorf("version = %d, want 19", v) + if v != 20 { + t.Errorf("version = %d, want 20", v) } // 2. Core tables exist. for _, tbl := range []string{ - "users", "devices", "plans", "subscriptions", "code_batches", "codes", + "users", "devices", "plans", "subscriptions", "legacy_code_batches", "legacy_codes", "usage_daily", "audit_log", "providers", "nodes", "node_events", "directory_version", "provision_idempotency", "replacements", "admins", "connect_credentials", "usage_device_daily", "sessions", "usage_hourly", "usage_device_hourly", diff --git a/server/internal/store/sqlite_stores_test.go b/server/internal/store/sqlite_stores_test.go index 9e6ce80..10a6c41 100644 --- a/server/internal/store/sqlite_stores_test.go +++ b/server/internal/store/sqlite_stores_test.go @@ -191,6 +191,15 @@ func TestSQLite_PersistCredentialUpsert(t *testing.T) { } func TestSQLite_CodesRedeemFlow(t *testing.T) { + // SKIP (codes-lib-integration Task 1): migration 000020 renames codes/code_batches + // -> legacy_codes/legacy_code_batches to make room for the github.com/wangjia/codes + // shared library's own `codes` table. This test exercises internal/codes.Store's + // low-level methods (CreateBatch/CreateCode/FindCodeByHashForUpdate/MarkRedeemed), + // which still target the old table names and are slated for removal once + // internal/codes/store.go is re-pointed at the library (Task 4) and the redeem + // path moves to codes.GuardedRedeem (Task 5, which deletes this test in favor of + // an equivalent Service-level sqlite case — see plan §Task 5). + t.Skip("superseded by codes-lib-integration Task 5 (internal/codes Store/Redeem move to shared lib); low-level methods here still target renamed legacy_* tables") ctx := context.Background() db := openSQLite(t) seedUser(t, db, 1) diff --git a/server/migrations/mysql/000020_codes_lib_legacy_rename.down.sql b/server/migrations/mysql/000020_codes_lib_legacy_rename.down.sql new file mode 100644 index 0000000..f31d8f0 --- /dev/null +++ b/server/migrations/mysql/000020_codes_lib_legacy_rename.down.sql @@ -0,0 +1,2 @@ +RENAME TABLE legacy_code_batches TO code_batches; +RENAME TABLE legacy_codes TO codes; diff --git a/server/migrations/mysql/000020_codes_lib_legacy_rename.up.sql b/server/migrations/mysql/000020_codes_lib_legacy_rename.up.sql new file mode 100644 index 0000000..55f937a --- /dev/null +++ b/server/migrations/mysql/000020_codes_lib_legacy_rename.up.sql @@ -0,0 +1,5 @@ +-- 旧激活码表更名封存:共享库 github.com/wangjia/codes 拥有自己的 `codes` 表(同名冲突), +-- 新表由 codes.ApplyMigrations 建(cmd/migrate up 内),数据经 Go 侧幂等回填(internal/codes/backfill.go)。 +-- legacy_* 只封存不删,retire 留到验收后的 cleanup。 +RENAME TABLE codes TO legacy_codes; +RENAME TABLE code_batches TO legacy_code_batches; diff --git a/server/migrations/sqlite/000020_codes_lib_legacy_rename.down.sql b/server/migrations/sqlite/000020_codes_lib_legacy_rename.down.sql new file mode 100644 index 0000000..32cdbcf --- /dev/null +++ b/server/migrations/sqlite/000020_codes_lib_legacy_rename.down.sql @@ -0,0 +1,2 @@ +ALTER TABLE legacy_code_batches RENAME TO code_batches; +ALTER TABLE legacy_codes RENAME TO codes; diff --git a/server/migrations/sqlite/000020_codes_lib_legacy_rename.up.sql b/server/migrations/sqlite/000020_codes_lib_legacy_rename.up.sql new file mode 100644 index 0000000..99d5069 --- /dev/null +++ b/server/migrations/sqlite/000020_codes_lib_legacy_rename.up.sql @@ -0,0 +1,3 @@ +-- 同 mysql 版注释;sqlite ≥3.25 的 RENAME 会自动更新其他表 FK 引用。 +ALTER TABLE codes RENAME TO legacy_codes; +ALTER TABLE code_batches RENAME TO legacy_code_batches;