From 3937abb17bfb64506f141dfd644e9e9986210ed2 Mon Sep 17 00:00:00 2001 From: Steven Date: Sun, 1 Sep 2024 08:40:16 +0800 Subject: [PATCH] chore: add visibility migrate scripts --- .../postgres/prod/1.0/00__visibility.sql | 11 +++ .../sqlite/prod/1.0/00__visibility.sql | 90 +++++++++++++++++++ store/migrator.go | 7 +- test/store/migrator_test.go | 2 +- test/test.go | 2 +- 5 files changed, 108 insertions(+), 4 deletions(-) create mode 100644 store/migration/postgres/prod/1.0/00__visibility.sql create mode 100644 store/migration/sqlite/prod/1.0/00__visibility.sql diff --git a/store/migration/postgres/prod/1.0/00__visibility.sql b/store/migration/postgres/prod/1.0/00__visibility.sql new file mode 100644 index 00000000..407da17b --- /dev/null +++ b/store/migration/postgres/prod/1.0/00__visibility.sql @@ -0,0 +1,11 @@ +ALTER TABLE shortcut DROP CONSTRAINT IF EXISTS shortcut_visibility_check; + +ALTER TABLE shortcut ALTER COLUMN visibility SET DEFAULT 'WORKSPACE'; + +UPDATE shortcut SET visibility = 'WORKSPACE' WHERE visibility = 'PRIVATE'; + +ALTER TABLE collection DROP CONSTRAINT IF EXISTS collection_visibility_check; + +ALTER TABLE collection ALTER COLUMN visibility SET DEFAULT 'WORKSPACE'; + +UPDATE collection SET visibility = 'WORKSPACE' WHERE visibility = 'PRIVATE'; diff --git a/store/migration/sqlite/prod/1.0/00__visibility.sql b/store/migration/sqlite/prod/1.0/00__visibility.sql new file mode 100644 index 00000000..3ef4283c --- /dev/null +++ b/store/migration/sqlite/prod/1.0/00__visibility.sql @@ -0,0 +1,90 @@ +UPDATE shortcut SET visibility = 'WORKSPACE' WHERE visibility = 'PRIVATE'; + +ALTER TABLE shortcut RENAME TO shortcut_old; + +CREATE TABLE shortcut ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + creator_id INTEGER NOT NULL, + created_ts BIGINT NOT NULL DEFAULT (strftime('%s', 'now')), + updated_ts BIGINT NOT NULL DEFAULT (strftime('%s', 'now')), + row_status TEXT NOT NULL CHECK (row_status IN ('NORMAL', 'ARCHIVED')) DEFAULT 'NORMAL', + name TEXT NOT NULL UNIQUE, + link TEXT NOT NULL, + title TEXT NOT NULL DEFAULT '', + description TEXT NOT NULL DEFAULT '', + visibility TEXT NOT NULL DEFAULT 'WORKSPACE', + tag TEXT NOT NULL DEFAULT '', + og_metadata TEXT NOT NULL DEFAULT '{}' +); + +INSERT INTO shortcut ( + id, + creator_id, + created_ts, + updated_ts, + row_status, + name, + link, + title, + description, + visibility, + tag, + og_metadata +) +SELECT + id, + creator_id, + created_ts, + updated_ts, + row_status, + name, + link, + title, + description, + visibility, + tag, + og_metadata +FROM shortcut_old; + +DROP TABLE shortcut_old; + +UPDATE collection SET visibility = 'WORKSPACE' WHERE visibility = 'PRIVATE'; + +ALTER TABLE collection RENAME TO collection_old; + +CREATE TABLE collection ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + creator_id INTEGER NOT NULL, + created_ts BIGINT NOT NULL DEFAULT (strftime('%s', 'now')), + updated_ts BIGINT NOT NULL DEFAULT (strftime('%s', 'now')), + name TEXT NOT NULL UNIQUE, + title TEXT NOT NULL DEFAULT '', + description TEXT NOT NULL DEFAULT '', + shortcut_ids INTEGER[] NOT NULL, + visibility TEXT NOT NULL DEFAULT 'WORKSPACE' +); + +INSERT INTO collection ( + id, + creator_id, + created_ts, + updated_ts, + name, + title, + description, + shortcut_ids, + visibility +) +SELECT + id, + creator_id, + created_ts, + updated_ts, + name, + title, + description, + shortcut_ids, + visibility +FROM collection_old; + +DROP TABLE collection_old; diff --git a/store/migrator.go b/store/migrator.go index 31e217e5..71ce4860 100644 --- a/store/migrator.go +++ b/store/migrator.go @@ -263,13 +263,17 @@ func (s *Store) normalizedMigrationHistoryList(ctx context.Context) error { sort.Sort(common.SortVersion(versions)) latestVersion := versions[len(versions)-1] latestMinorVersion := common.GetMinorVersion(latestVersion) + // If the latest version is greater than or equal to 1.0, the migration history is already normalized. + if common.IsVersionGreaterOrEqualThan(latestMinorVersion, "1.0") { + return nil + } - schemaVersionMap := map[string]string{} filePaths, err := fs.Glob(migrationFS, fmt.Sprintf("%s*/*.sql", s.getMigrationBasePath())) if err != nil { return errors.Wrap(err, "failed to read migration files") } sort.Strings(filePaths) + schemaVersionMap := map[string]string{} for _, filePath := range filePaths { fileSchemaVersion, err := s.getSchemaVersionOfMigrateScript(filePath) if err != nil { @@ -283,7 +287,6 @@ func (s *Store) normalizedMigrationHistoryList(ctx context.Context) error { return errors.Wrap(err, "failed to get current schema version") } schemaVersionMap[common.GetMinorVersion(currentSchemaVersion)] = currentSchemaVersion - latestSchemaVersion := schemaVersionMap[latestMinorVersion] if latestSchemaVersion == "" { return errors.Errorf("latest schema version not found") diff --git a/test/store/migrator_test.go b/test/store/migrator_test.go index 046ca6c7..83b87d1c 100644 --- a/test/store/migrator_test.go +++ b/test/store/migrator_test.go @@ -13,5 +13,5 @@ func TestGetCurrentSchemaVersion(t *testing.T) { currentSchemaVersion, err := ts.GetCurrentSchemaVersion() require.NoError(t, err) - require.Equal(t, "1.0.0", currentSchemaVersion) + require.Equal(t, "1.0.1", currentSchemaVersion) } diff --git a/test/test.go b/test/test.go index 83b089ab..0d86fa01 100644 --- a/test/test.go +++ b/test/test.go @@ -32,7 +32,7 @@ func GetTestingProfile(t *testing.T) *profile.Profile { // Get a temporary directory for the test data. dir := t.TempDir() - mode := "dev" + mode := "prod" port := getUnusedPort() driver := getDriverFromEnv() dsn := os.Getenv("DSN")