89 lines
2.5 KiB
SQL
89 lines
2.5 KiB
SQL
CREATE EXTENSION IF NOT EXISTS pgcrypto;
|
|
|
|
CREATE TABLE public."user" (
|
|
id TEXT PRIMARY KEY,
|
|
ssh_identifier TEXT NOT NULL DEFAULT substr(encode(gen_random_bytes(16), 'hex'), 1, 32),
|
|
name TEXT NOT NULL,
|
|
email TEXT NOT NULL,
|
|
email_verified BOOLEAN NOT NULL DEFAULT false,
|
|
image TEXT,
|
|
created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE UNIQUE INDEX user_email_unique
|
|
ON public."user"(email);
|
|
|
|
CREATE UNIQUE INDEX user_ssh_identifier_unique
|
|
ON public."user"(ssh_identifier);
|
|
|
|
CREATE TABLE public.account (
|
|
id TEXT PRIMARY KEY,
|
|
account_id TEXT NOT NULL,
|
|
provider_id TEXT NOT NULL,
|
|
user_id TEXT NOT NULL,
|
|
access_token TEXT,
|
|
refresh_token TEXT,
|
|
id_token TEXT,
|
|
access_token_expires_at TIMESTAMP WITHOUT TIME ZONE,
|
|
refresh_token_expires_at TIMESTAMP WITHOUT TIME ZONE,
|
|
scope TEXT,
|
|
password TEXT,
|
|
created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL
|
|
);
|
|
|
|
CREATE INDEX account_userId_idx
|
|
ON public.account(user_id);
|
|
|
|
ALTER TABLE public.account
|
|
ADD CONSTRAINT account_user_id_user_id_fk
|
|
FOREIGN KEY (user_id)
|
|
REFERENCES public."user"(id)
|
|
ON DELETE CASCADE;
|
|
|
|
|
|
CREATE TABLE public.session (
|
|
id TEXT PRIMARY KEY,
|
|
expires_at TIMESTAMP WITHOUT TIME ZONE NOT NULL,
|
|
token TEXT NOT NULL,
|
|
created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL,
|
|
ip_address TEXT,
|
|
user_agent TEXT,
|
|
user_id TEXT NOT NULL
|
|
);
|
|
|
|
CREATE UNIQUE INDEX session_token_unique
|
|
ON public.session(token);
|
|
|
|
CREATE INDEX session_userId_idx
|
|
ON public.session(user_id);
|
|
|
|
ALTER TABLE public.session
|
|
ADD CONSTRAINT session_user_id_user_id_fk
|
|
FOREIGN KEY (user_id)
|
|
REFERENCES public."user"(id)
|
|
ON DELETE CASCADE;
|
|
|
|
|
|
CREATE TABLE public.jwks (
|
|
id TEXT PRIMARY KEY,
|
|
public_key TEXT NOT NULL,
|
|
private_key TEXT NOT NULL,
|
|
created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL,
|
|
expires_at TIMESTAMP WITHOUT TIME ZONE
|
|
);
|
|
|
|
CREATE TABLE public.verification (
|
|
id TEXT PRIMARY KEY,
|
|
identifier TEXT NOT NULL,
|
|
value TEXT NOT NULL,
|
|
expires_at TIMESTAMP WITHOUT TIME ZONE NOT NULL,
|
|
created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX verification_identifier_idx
|
|
ON public.verification(identifier);
|