mirror of
https://github.com/pocketbase/pocketbase.git
synced 2025-02-13 08:24:37 +02:00
77 lines
2.4 KiB
Go
77 lines
2.4 KiB
Go
package migrations
|
|
|
|
import "github.com/pocketbase/dbx"
|
|
|
|
func init() {
|
|
AppMigrations.Register(func(db dbx.Builder) error {
|
|
_, createErr := db.NewQuery(`
|
|
CREATE TABLE {{_externalAuths}} (
|
|
[[id]] TEXT PRIMARY KEY,
|
|
[[userId]] TEXT NOT NULL,
|
|
[[provider]] TEXT NOT NULL,
|
|
[[providerId]] TEXT NOT NULL,
|
|
[[created]] TEXT DEFAULT "" NOT NULL,
|
|
[[updated]] TEXT DEFAULT "" NOT NULL,
|
|
---
|
|
FOREIGN KEY ([[userId]]) REFERENCES {{_users}} ([[id]]) ON UPDATE CASCADE ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE UNIQUE INDEX _externalAuths_userId_provider_idx on {{_externalAuths}} ([[userId]], [[provider]]);
|
|
CREATE UNIQUE INDEX _externalAuths_provider_providerId_idx on {{_externalAuths}} ([[provider]], [[providerId]]);
|
|
`).Execute()
|
|
if createErr != nil {
|
|
return createErr
|
|
}
|
|
|
|
// remove the unique email index from the _users table and
|
|
// replace it with partial index
|
|
_, alterErr := db.NewQuery(`
|
|
-- crate new users table
|
|
CREATE TABLE {{_newUsers}} (
|
|
[[id]] TEXT PRIMARY KEY,
|
|
[[verified]] BOOLEAN DEFAULT FALSE NOT NULL,
|
|
[[email]] TEXT DEFAULT "" NOT NULL,
|
|
[[tokenKey]] TEXT NOT NULL,
|
|
[[passwordHash]] TEXT NOT NULL,
|
|
[[lastResetSentAt]] TEXT DEFAULT "" NOT NULL,
|
|
[[lastVerificationSentAt]] TEXT DEFAULT "" NOT NULL,
|
|
[[created]] TEXT DEFAULT "" NOT NULL,
|
|
[[updated]] TEXT DEFAULT "" NOT NULL
|
|
);
|
|
|
|
-- copy all data from the old users table to the new one
|
|
INSERT INTO {{_newUsers}} SELECT * FROM {{_users}};
|
|
|
|
-- drop old table
|
|
DROP TABLE {{_users}};
|
|
|
|
-- rename new table
|
|
ALTER TABLE {{_newUsers}} RENAME TO {{_users}};
|
|
|
|
-- create named indexes
|
|
CREATE UNIQUE INDEX _users_email_idx ON {{_users}} ([[email]]) WHERE [[email]] != "";
|
|
CREATE UNIQUE INDEX _users_tokenKey_idx ON {{_users}} ([[tokenKey]]);
|
|
`).Execute()
|
|
if alterErr != nil {
|
|
return alterErr
|
|
}
|
|
|
|
return nil
|
|
}, func(db dbx.Builder) error {
|
|
if _, err := db.DropTable("_externalAuths").Execute(); err != nil {
|
|
return err
|
|
}
|
|
|
|
// drop the partial email unique index and replace it with normal unique index
|
|
_, indexErr := db.NewQuery(`
|
|
DROP INDEX IF EXISTS _users_email_idx;
|
|
CREATE UNIQUE INDEX _users_email_idx on {{_users}} ([[email]]);
|
|
`).Execute()
|
|
if indexErr != nil {
|
|
return indexErr
|
|
}
|
|
|
|
return nil
|
|
})
|
|
}
|