-- DROP TABLE IF EXISTS public.user CASCADE; CREATE TABLE public.user ( id BIGSERIAL PRIMARY KEY, username TEXT, photo TEXT, issuer TEXT NOT NULL, type TEXT NOT NULL, identifier TEXT NOT NULL, created_ts TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_ts TIMESTAMPTZ NOT NULL DEFAULT NOW(), CONSTRAINT uniq__user__issuer_identifier UNIQUE (issuer, identifier) ); CREATE INDEX idx__user__username ON public.user (username); CREATE INDEX idx__user__identifier ON public.user (identifier); CREATE INDEX idx__user__type ON public.user (type); CREATE INDEX idx__user__issuer ON public.user (issuer); CREATE INDEX idx__user__created_ts ON public.user (created_ts); CREATE INDEX idx__user__updated_ts ON public.user (updated_ts); -- DROP TABLE IF EXISTS public.app CASCADE; CREATE TABLE public.app ( id BIGSERIAL PRIMARY KEY, type TEXT UNIQUE NOT NULL, created_ts TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_ts TIMESTAMPTZ NOT NULL DEFAULT NOW() ); CREATE INDEX idx__app__type ON public.app (type); CREATE INDEX idx__app__created_ts ON public.app (created_ts); CREATE INDEX idx__app__updated_ts ON public.app (updated_ts); -- DROP TABLE IF EXISTS public.auth CASCADE; CREATE TABLE public.auth ( id BIGSERIAL PRIMARY KEY, user_id BIGINT NOT NULL REFERENCES public.user(id), app_id BIGINT NOT NULL REFERENCES public.app(id), api_key TEXT NOT NULL, created_ts TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_ts TIMESTAMPTZ NOT NULL DEFAULT NOW(), CONSTRAINT uniq__auth__user_id_app_id UNIQUE (user_id, app_id) ); CREATE INDEX idx__auth__user_id ON public.auth (user_id); CREATE INDEX idx__auth__app_id ON public.auth (app_id); CREATE INDEX idx__auth__api_key ON public.auth (api_key); CREATE INDEX idx__auth__created_ts ON public.auth (created_ts); CREATE INDEX idx__auth__updated_ts ON public.auth (updated_ts);