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;