Files
diplom/migrations/20250510183102_user.up.sql
2025-05-14 06:47:10 +03:00

46 lines
1.5 KiB
PL/PgSQL

CREATE TABLE IF NOT EXISTS "user"
(
"id" UUID NOT NULL PRIMARY KEY DEFAULT uuid_generate_v7(),
"avatar_url" VARCHAR,
"username" VARCHAR NOT NULL UNIQUE,
"display_name" VARCHAR,
"email" VARCHAR NOT NULL,
"password_hash" VARCHAR NOT NULL,
"bot" BOOLEAN NOT NULL DEFAULT FALSE,
"system" BOOLEAN NOT NULL DEFAULT FALSE,
"settings" JSONB NOT NULL DEFAULT '{}'::JSONB
);
CREATE TABLE IF NOT EXISTS "user_relation"
(
"user_id" UUID NOT NULL CHECK (user_id <> other_id) REFERENCES "user" ("id") ON DELETE CASCADE,
"other_id" UUID NOT NULL CHECK (user_id <> other_id) REFERENCES "user" ("id") ON DELETE CASCADE,
"type" INT2 NOT NULL,
"created_at" TIMESTAMPTZ NOT NULL DEFAULT now(),
"updated_at" TIMESTAMPTZ NOT NULL DEFAULT now(),
PRIMARY KEY ("user_id", "other_id")
);
-- create system account
INSERT INTO "user" ("username", "display_name", "email", "password_hash", "bot", "system")
VALUES ('system', 'System', 'system@lionarius.ru', '', TRUE, TRUE);
CREATE OR REPLACE FUNCTION fn_on_user_relation_update()
RETURNS TRIGGER
LANGUAGE plpgsql
AS
$$
BEGIN
IF (TG_OP = 'UPDATE') THEN
NEW.updated_at := now();
END IF;
RETURN NEW;
END;
$$;
CREATE TRIGGER trg_user_relation_update
BEFORE UPDATE
ON "user_relation"
FOR EACH ROW
EXECUTE FUNCTION fn_on_user_relation_update();