58 lines
No EOL
1.8 KiB
SQL
58 lines
No EOL
1.8 KiB
SQL
-- This file is used for generating queries; If you change anything please
|
|
-- also add migrations in `assets/migrations`.
|
|
|
|
CREATE TABLE "user" (
|
|
"id" bigserial NOT NULL,
|
|
"is_admin" boolean NOT NULL DEFAULT false,
|
|
"password" bytea NULL,
|
|
"created_at" timestamptz NOT NULL DEFAULT NOW(),
|
|
PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "email" (
|
|
"address" text NOT NULL,
|
|
"user_id" bigint NOT NULL,
|
|
"created_at" timestamptz NOT NULL DEFAULT NOW(),
|
|
FOREIGN KEY ("user_id") REFERENCES "user" ("id") ON DELETE CASCADE,
|
|
PRIMARY KEY ("address")
|
|
);
|
|
CREATE INDEX ON "email" ("user_id");
|
|
|
|
CREATE TABLE "confirmation" (
|
|
"email_address" text NOT NULL,
|
|
"user_id" bigint NOT NULL,
|
|
"selector" text NOT NULL,
|
|
"verifier" bytea NOT NULL, -- hashed
|
|
"expires_at" timestamptz NOT NULL DEFAULT NOW(),
|
|
FOREIGN KEY ("user_id") REFERENCES "user" ("id") ON DELETE CASCADE,
|
|
PRIMARY KEY ("selector")
|
|
);
|
|
CREATE INDEX ON "confirmation" ("user_id");
|
|
|
|
CREATE TABLE "reset" (
|
|
"user_id" bigint NOT NULL,
|
|
"selector" text NOT NULL,
|
|
"verifier" bytea NOT NULL, -- hashed
|
|
"expires_at" timestamptz NOT NULL DEFAULT NOW(),
|
|
FOREIGN KEY ("user_id") REFERENCES "user" ("id") ON DELETE CASCADE,
|
|
PRIMARY KEY ("selector")
|
|
);
|
|
CREATE UNIQUE INDEX ON "reset" ("user_id");
|
|
|
|
CREATE TABLE "external_auth" (
|
|
"id" bigserial NOT NULL,
|
|
"name" text NOT NULL,
|
|
"type" text NOT NULL,
|
|
"config" jsonb NOT NULL,
|
|
PRIMARY KEY ("id")
|
|
);
|
|
CREATE INDEX ON "external_auth" ("type");
|
|
|
|
CREATE TABLE "external_user" (
|
|
"external_auth_id" bigint NOT NULL,
|
|
"foreign_id" text NOT NULL,
|
|
"user_id" bigint NOT NULL,
|
|
FOREIGN KEY ("user_id") REFERENCES "user" ("id") ON DELETE CASCADE,
|
|
FOREIGN KEY ("external_auth_id") REFERENCES "external_auth" ("id") ON DELETE CASCADE,
|
|
PRIMARY KEY ("external_auth_id", "foreign_id")
|
|
); |