28 lines
1.2 KiB
SQL
28 lines
1.2 KiB
SQL
CREATE EXTENSION citext;
|
|
CREATE DOMAIN email AS citext
|
|
CHECK ( value ~ '^[a-zA-Z0-9.!#$%&''*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$' );
|
|
CREATE TABLE "users" (
|
|
"id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
"email" email UNIQUE NOT NULL,
|
|
"full_name" TEXT NOT NULL,
|
|
"password" CHARACTER VARYING (1000),
|
|
"active" BOOLEAN NOT NULL
|
|
);
|
|
CREATE TABLE "roles" (
|
|
"id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
"name" TEXT NOT NULL UNIQUE
|
|
);
|
|
CREATE TABLE "user_roles" (
|
|
"user_id" UUID NOT NULL REFERENCES "users" ("id") ON DELETE CASCADE,
|
|
"role_name" TEXT NOT NULL REFERENCES "roles" ("name") ON DELETE NO ACTION
|
|
);
|
|
CREATE TABLE "user_tokens" (
|
|
"id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
"user_id" UUID NOT NULL,
|
|
"token" CHARACTER VARYING (1000) NOT NULL,
|
|
"realm" CHARACTER VARYING (10) NOT NULL CHECK ("realm" IN ('invite', 'forgot')),
|
|
"insert_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "user_tokens_user_fk" FOREIGN KEY ("user_id") REFERENCES "users" ("id") ON DELETE CASCADE
|
|
);
|
|
INSERT INTO "roles" ("name") VALUES ('admin');
|