mirror of
https://github.com/pocket-id/pocket-id.git
synced 2026-08-24 21:17:31 +00:00
Co-authored-by: Elias Schneider <login@eliasschneider.com>
63 lines
2.3 KiB
PL/PgSQL
63 lines
2.3 KiB
PL/PgSQL
PRAGMA foreign_keys=OFF;
|
|
BEGIN;
|
|
|
|
-- Recreate the one_time_access_tokens table with the schema it had before it was dropped.
|
|
CREATE TABLE one_time_access_tokens
|
|
(
|
|
id TEXT PRIMARY KEY,
|
|
created_at DATETIME NOT NULL,
|
|
token TEXT NOT NULL UNIQUE,
|
|
expires_at DATETIME NOT NULL,
|
|
user_id TEXT NOT NULL REFERENCES users ON DELETE CASCADE,
|
|
device_token TEXT
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_one_time_access_tokens_expires_at ON one_time_access_tokens (expires_at);
|
|
|
|
-- Recreate the signup token tables with the schema they had before they were frozen.
|
|
CREATE TABLE signup_tokens (
|
|
id TEXT NOT NULL PRIMARY KEY,
|
|
created_at DATETIME NOT NULL,
|
|
token TEXT NOT NULL UNIQUE,
|
|
expires_at DATETIME NOT NULL,
|
|
usage_limit INTEGER NOT NULL DEFAULT 1,
|
|
usage_count INTEGER NOT NULL DEFAULT 0
|
|
);
|
|
CREATE INDEX idx_signup_tokens_token ON signup_tokens(token);
|
|
CREATE INDEX idx_signup_tokens_expires_at ON signup_tokens(expires_at);
|
|
|
|
CREATE TABLE signup_tokens_user_groups
|
|
(
|
|
signup_token_id TEXT NOT NULL,
|
|
user_group_id TEXT NOT NULL,
|
|
PRIMARY KEY (signup_token_id, user_group_id),
|
|
FOREIGN KEY (signup_token_id) REFERENCES signup_tokens (id) ON DELETE CASCADE,
|
|
FOREIGN KEY (user_group_id) REFERENCES user_groups (id) ON DELETE CASCADE
|
|
);
|
|
|
|
-- Restore the signup tokens from the frozen JSON document stored in the "kv" table.
|
|
-- json_each expands the JSON array into one row per token object.
|
|
INSERT INTO signup_tokens (id, created_at, token, expires_at, usage_limit, usage_count)
|
|
SELECT
|
|
json_extract(e.value, '$.id'),
|
|
json_extract(e.value, '$.createdAt'),
|
|
json_extract(e.value, '$.token'),
|
|
json_extract(e.value, '$.expiresAt'),
|
|
json_extract(e.value, '$.usageLimit'),
|
|
json_extract(e.value, '$.usageCount')
|
|
FROM kv, json_each(kv."value") AS e
|
|
WHERE kv."key" = 'signup_tokens_migrated';
|
|
|
|
-- Restore the token/user-group associations, expanding each token's nested userGroupIds array.
|
|
INSERT INTO signup_tokens_user_groups (signup_token_id, user_group_id)
|
|
SELECT
|
|
json_extract(e.value, '$.id'),
|
|
g.value
|
|
FROM kv, json_each(kv."value") AS e, json_each(json_extract(e.value, '$.userGroupIds')) AS g
|
|
WHERE kv."key" = 'signup_tokens_migrated';
|
|
|
|
-- Remove the frozen signup tokens from the "kv" table.
|
|
DELETE FROM kv WHERE "key" = 'signup_tokens_migrated';
|
|
|
|
COMMIT;
|
|
PRAGMA foreign_keys=ON;
|