65 lines
2.5 KiB
PL/PgSQL
65 lines
2.5 KiB
PL/PgSQL
CREATE TABLE polochons (
|
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
name text NOT NULL,
|
|
url text NOT NULL,
|
|
token text NOT NULL,
|
|
auth_token text NOT NULL DEFAULT gen_random_uuid(),
|
|
admin_id uuid NOT NULL REFERENCES users (id),
|
|
LIKE base INCLUDING DEFAULTS
|
|
);
|
|
|
|
CREATE UNIQUE INDEX ON polochons (id);
|
|
CREATE INDEX ON polochons (name);
|
|
CREATE TRIGGER update_polochons_updated_at BEFORE UPDATE ON polochons FOR EACH ROW EXECUTE PROCEDURE update_updated_at_column();
|
|
|
|
ALTER TABLE users ADD COLUMN polochon_id uuid DEFAULT NULL REFERENCES polochons (id);
|
|
ALTER TABLE users ADD COLUMN token text NOT NULL DEFAULT '';
|
|
ALTER TABLE users ADD COLUMN polochon_activated boolean NOT NULL DEFAULT false;
|
|
|
|
CREATE INDEX ON users (polochon_id);
|
|
|
|
CREATE OR REPLACE FUNCTION migrate_polochons() RETURNS void AS $$
|
|
DECLARE
|
|
u RECORD;
|
|
polochon RECORD;
|
|
admin RECORD;
|
|
BEGIN
|
|
-- Retrieve the admin
|
|
SELECT * INTO admin FROM users WHERE name = 'admin';
|
|
|
|
FOR u IN select * from users LOOP
|
|
-- Check if polochon is configured and the user is activated
|
|
IF u.activated = false OR u.rawconfig->'polochon' IS NULL THEN
|
|
RAISE NOTICE ' => skipping user %', quote_ident(u.name);
|
|
CONTINUE;
|
|
END IF;
|
|
|
|
RAISE NOTICE 'SELECT * INTO polochon FROM polochons WHERRE name = %', u.rawconfig->'polochon'->>'url';
|
|
-- Try to get the user's polochon
|
|
SELECT * INTO polochon FROM polochons WHERE name = u.rawconfig->'polochon'->>'url';
|
|
-- If polochon is null, create it
|
|
IF polochon IS NULL THEN
|
|
RAISE NOTICE ' => user % have polochon % not yet created, create it!', quote_ident(u.name), u.rawconfig->'polochon'->>'url';
|
|
INSERT INTO polochons (name, url, token, admin_id)
|
|
VALUES (u.rawconfig->'polochon'->>'url', u.rawconfig->'polochon'->>'url', u.rawconfig->'polochon'->>'token', admin.id)
|
|
RETURNING * INTO polochon;
|
|
END IF;
|
|
|
|
RAISE NOTICE ' => user % have polochon %', quote_ident(u.name), u.rawconfig->'polochon'->>'url';
|
|
-- Update the user with the token and polochon_id
|
|
UPDATE
|
|
users
|
|
SET
|
|
token = u.rawconfig->'polochon'->>'token',
|
|
polochon_id = polochon.id,
|
|
polochon_activated = true
|
|
WHERE
|
|
id = u.id;
|
|
END LOOP;
|
|
RAISE NOTICE 'ALL DONE';
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
SELECT * FROM migrate_polochons();
|
|
DROP FUNCTION migrate_polochons();
|