oxynote/server/core/internal/db/schema.sql
2026-10-17 12:10:35 +03:00

974 lines
39 KiB
SQL

-- generated from migrations/ by Test_Schema. Do not edit; run `make schema` in server/core.
CREATE TABLE public.branch_reviewers (
fk_branch_id text NOT NULL,
fk_user_id text NOT NULL,
fk_organization_id text NOT NULL,
currently_approved boolean DEFAULT false NOT NULL,
previously_approved boolean DEFAULT false NOT NULL
);
ALTER TABLE ONLY public.branch_reviewers
ADD CONSTRAINT branch_reviewers_pkey PRIMARY KEY (fk_branch_id, fk_user_id);
CREATE INDEX branch_reviewers_fk_organization_id_idx ON public.branch_reviewers USING btree (fk_organization_id);
CREATE INDEX branch_reviewers_fk_user_id_idx ON public.branch_reviewers USING btree (fk_user_id);
ALTER TABLE ONLY public.branch_reviewers
ADD CONSTRAINT branch_reviewers_fk_branch_id_fkey FOREIGN KEY (fk_branch_id) REFERENCES public.document_branches(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.branch_reviewers
ADD CONSTRAINT branch_reviewers_fk_organization_id_fkey FOREIGN KEY (fk_organization_id) REFERENCES public.organizations(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.branch_reviewers
ADD CONSTRAINT branch_reviewers_fk_user_id_fkey FOREIGN KEY (fk_user_id) REFERENCES public.users(id) ON DELETE CASCADE;
CREATE TABLE public.data_sources (
id text NOT NULL,
fk_organization_id text NOT NULL,
name text NOT NULL,
type text NOT NULL,
url text NOT NULL,
credentials bytea NOT NULL,
status text NOT NULL,
created_at timestamp with time zone NOT NULL,
updated_at timestamp with time zone
);
ALTER TABLE ONLY public.data_sources
ADD CONSTRAINT data_sources_fk_organization_id_name_key UNIQUE (fk_organization_id, name);
ALTER TABLE ONLY public.data_sources
ADD CONSTRAINT data_sources_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.data_sources
ADD CONSTRAINT data_sources_fk_organization_id_fkey FOREIGN KEY (fk_organization_id) REFERENCES public.organizations(id) ON DELETE CASCADE;
CREATE TABLE public.document_branch_history_entries (
id text NOT NULL,
fk_document_id text NOT NULL,
fk_branch_id text NOT NULL,
content jsonb NOT NULL,
created_at timestamp without time zone NOT NULL,
document_name text,
icon text,
fk_last_updated_by text,
hooks jsonb NOT NULL,
boundary boolean NOT NULL,
updated_at timestamp without time zone NOT NULL,
checksum text NOT NULL
);
ALTER TABLE ONLY public.document_branch_history_entries
ADD CONSTRAINT document_branch_history_entries_pkey PRIMARY KEY (id);
CREATE INDEX document_branch_history_entries_created_at_idx ON public.document_branch_history_entries USING btree (created_at);
CREATE INDEX document_branch_history_entries_fk_branch_id_created_at_idx ON public.document_branch_history_entries USING btree (fk_branch_id, created_at DESC, id DESC);
CREATE INDEX document_branch_history_entries_fk_document_id_idx ON public.document_branch_history_entries USING btree (fk_document_id);
CREATE INDEX document_branch_history_entries_fk_last_updated_by_idx ON public.document_branch_history_entries USING btree (fk_last_updated_by);
ALTER TABLE ONLY public.document_branch_history_entries
ADD CONSTRAINT document_branch_history_entries_fk_branch_id_fkey FOREIGN KEY (fk_branch_id) REFERENCES public.document_branches(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.document_branch_history_entries
ADD CONSTRAINT document_branch_history_entries_fk_document_id_fkey FOREIGN KEY (fk_document_id) REFERENCES public.documents(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.document_branch_history_entries
ADD CONSTRAINT document_branch_history_entries_fk_last_updated_by_fkey FOREIGN KEY (fk_last_updated_by) REFERENCES public.users(id) ON DELETE SET NULL;
CREATE TABLE public.document_branch_tags (
fk_branch_id text NOT NULL,
fk_tag_id text NOT NULL,
fk_organization_id text NOT NULL
);
ALTER TABLE ONLY public.document_branch_tags
ADD CONSTRAINT document_branch_tags_pkey PRIMARY KEY (fk_branch_id, fk_tag_id);
CREATE INDEX document_branch_tags_fk_organization_id_idx ON public.document_branch_tags USING btree (fk_organization_id);
CREATE INDEX document_branch_tags_fk_tag_id_idx ON public.document_branch_tags USING btree (fk_tag_id);
ALTER TABLE ONLY public.document_branch_tags
ADD CONSTRAINT document_branch_tags_fk_branch_id_fkey FOREIGN KEY (fk_branch_id) REFERENCES public.document_branches(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.document_branch_tags
ADD CONSTRAINT document_branch_tags_fk_organization_id_fkey FOREIGN KEY (fk_organization_id) REFERENCES public.organizations(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.document_branch_tags
ADD CONSTRAINT document_branch_tags_fk_tag_id_fkey FOREIGN KEY (fk_tag_id) REFERENCES public.tags(id) ON DELETE CASCADE;
CREATE TABLE public.document_branch_views (
fk_user_id text NOT NULL,
fk_organization_id text NOT NULL,
fk_branch_id text NOT NULL,
viewed_at timestamp without time zone NOT NULL,
viewed_from text NOT NULL
);
ALTER TABLE ONLY public.document_branch_views
ADD CONSTRAINT document_branch_views_pkey PRIMARY KEY (fk_user_id, fk_branch_id, viewed_from);
CREATE INDEX document_branch_views_fk_branch_id_idx ON public.document_branch_views USING btree (fk_branch_id);
CREATE INDEX document_branch_views_fk_organization_id_idx ON public.document_branch_views USING btree (fk_organization_id);
CREATE INDEX document_branch_views_fk_user_id_viewed_from_viewed_at_idx ON public.document_branch_views USING btree (fk_user_id, fk_organization_id, viewed_from, viewed_at DESC);
ALTER TABLE ONLY public.document_branch_views
ADD CONSTRAINT document_branch_views_fk_branch_id_fkey FOREIGN KEY (fk_branch_id) REFERENCES public.document_branches(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.document_branch_views
ADD CONSTRAINT document_branch_views_fk_organization_id_fkey FOREIGN KEY (fk_organization_id) REFERENCES public.organizations(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.document_branch_views
ADD CONSTRAINT document_branch_views_fk_user_id_fkey FOREIGN KEY (fk_user_id) REFERENCES public.users(id) ON DELETE CASCADE;
CREATE TABLE public.document_branches (
id text NOT NULL,
fk_document_id text NOT NULL,
fk_organization_id text NOT NULL,
branch_name text NOT NULL,
document_name text,
icon text,
content jsonb,
raw_content bytea,
protected boolean DEFAULT false NOT NULL,
"default" boolean DEFAULT false NOT NULL,
created_at timestamp without time zone NOT NULL,
fk_created_by text,
updated_at timestamp without time zone NOT NULL,
fk_last_updated_by text
);
ALTER TABLE ONLY public.document_branches
ADD CONSTRAINT document_branches_fk_document_id_branch_name_key UNIQUE (fk_document_id, branch_name);
ALTER TABLE ONLY public.document_branches
ADD CONSTRAINT document_branches_pkey PRIMARY KEY (id);
CREATE INDEX document_branches_fk_created_by_idx ON public.document_branches USING btree (fk_created_by);
CREATE INDEX document_branches_fk_last_updated_by_idx ON public.document_branches USING btree (fk_last_updated_by);
CREATE INDEX document_branches_fk_organization_id_idx ON public.document_branches USING btree (fk_organization_id);
ALTER TABLE ONLY public.document_branches
ADD CONSTRAINT document_branches_fk_created_by_fkey FOREIGN KEY (fk_created_by) REFERENCES public.users(id) ON DELETE SET NULL;
ALTER TABLE ONLY public.document_branches
ADD CONSTRAINT document_branches_fk_document_id_fkey FOREIGN KEY (fk_document_id) REFERENCES public.documents(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.document_branches
ADD CONSTRAINT document_branches_fk_last_updated_by_fkey FOREIGN KEY (fk_last_updated_by) REFERENCES public.users(id) ON DELETE SET NULL;
ALTER TABLE ONLY public.document_branches
ADD CONSTRAINT document_branches_fk_organization_id_fkey FOREIGN KEY (fk_organization_id) REFERENCES public.organizations(id) ON DELETE CASCADE;
CREATE TABLE public.document_comment_replies (
id text NOT NULL,
fk_document_comment_id text NOT NULL,
fk_organization_id text NOT NULL,
fk_user_id text,
content jsonb NOT NULL,
created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone
);
ALTER TABLE ONLY public.document_comment_replies
ADD CONSTRAINT document_comment_replies_pkey PRIMARY KEY (id);
CREATE INDEX document_comment_replies_fk_document_comment_id_idx ON public.document_comment_replies USING btree (fk_document_comment_id);
CREATE INDEX document_comment_replies_fk_user_id_idx ON public.document_comment_replies USING btree (fk_user_id);
ALTER TABLE ONLY public.document_comment_replies
ADD CONSTRAINT document_comment_replies_fk_document_comment_id_fkey FOREIGN KEY (fk_document_comment_id) REFERENCES public.document_comments(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.document_comment_replies
ADD CONSTRAINT document_comment_replies_fk_organization_id_fkey FOREIGN KEY (fk_organization_id) REFERENCES public.organizations(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.document_comment_replies
ADD CONSTRAINT document_comment_replies_fk_user_id_fkey FOREIGN KEY (fk_user_id) REFERENCES public.users(id) ON DELETE SET NULL;
CREATE TABLE public.document_comments (
id text NOT NULL,
fk_document_id text NOT NULL,
fk_branch_id text NOT NULL,
fk_user_id text,
fk_organization_id text NOT NULL,
fk_resolved_by text,
resolved_at timestamp without time zone,
anchor_block_id text,
resolved boolean DEFAULT false NOT NULL,
content jsonb NOT NULL,
diff_deletion_context jsonb,
created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone
);
ALTER TABLE ONLY public.document_comments
ADD CONSTRAINT document_comments_pkey PRIMARY KEY (id);
CREATE INDEX document_comments_fk_branch_id_idx ON public.document_comments USING btree (fk_branch_id);
CREATE INDEX document_comments_fk_document_id_idx ON public.document_comments USING btree (fk_document_id);
CREATE INDEX document_comments_fk_resolved_by_idx ON public.document_comments USING btree (fk_resolved_by);
CREATE INDEX document_comments_fk_user_id_idx ON public.document_comments USING btree (fk_user_id);
ALTER TABLE ONLY public.document_comments
ADD CONSTRAINT document_comments_fk_branch_id_fkey FOREIGN KEY (fk_branch_id) REFERENCES public.document_branches(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.document_comments
ADD CONSTRAINT document_comments_fk_document_id_fkey FOREIGN KEY (fk_document_id) REFERENCES public.documents(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.document_comments
ADD CONSTRAINT document_comments_fk_organization_id_fkey FOREIGN KEY (fk_organization_id) REFERENCES public.organizations(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.document_comments
ADD CONSTRAINT document_comments_fk_resolved_by_fkey FOREIGN KEY (fk_resolved_by) REFERENCES public.users(id) ON DELETE SET NULL;
ALTER TABLE ONLY public.document_comments
ADD CONSTRAINT document_comments_fk_user_id_fkey FOREIGN KEY (fk_user_id) REFERENCES public.users(id) ON DELETE SET NULL;
CREATE TABLE public.document_files (
id text NOT NULL,
location text NOT NULL,
storage_key text NOT NULL,
fk_document_id text,
fk_organization_id text,
name text NOT NULL,
size bigint NOT NULL,
content_type text NOT NULL,
created_at timestamp without time zone NOT NULL,
unreferenced_at timestamp without time zone
);
ALTER TABLE ONLY public.document_files
ADD CONSTRAINT document_files_pkey PRIMARY KEY (id);
CREATE INDEX document_files_fk_document_id_idx ON public.document_files USING btree (fk_document_id);
CREATE INDEX document_files_fk_organization_id_idx ON public.document_files USING btree (fk_organization_id);
ALTER TABLE ONLY public.document_files
ADD CONSTRAINT document_files_fk_document_id_fkey FOREIGN KEY (fk_document_id) REFERENCES public.documents(id) ON DELETE SET NULL;
ALTER TABLE ONLY public.document_files
ADD CONSTRAINT document_files_fk_organization_id_fkey FOREIGN KEY (fk_organization_id) REFERENCES public.organizations(id) ON DELETE SET NULL;
CREATE TABLE public.document_hooks (
id text NOT NULL,
type text NOT NULL,
fk_document_id text,
fk_organization_id text,
fk_branch_id text,
block_id text,
settings jsonb NOT NULL,
state text,
score integer NOT NULL,
created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone,
soft_deleted_at timestamp without time zone,
cross_branch_id text NOT NULL,
status text DEFAULT 'active'::text NOT NULL
);
ALTER TABLE ONLY public.document_hooks
ADD CONSTRAINT document_hooks_pkey PRIMARY KEY (id);
CREATE INDEX document_hooks_fk_branch_id_idx ON public.document_hooks USING btree (fk_branch_id);
CREATE INDEX document_hooks_fk_document_id_idx ON public.document_hooks USING btree (fk_document_id);
ALTER TABLE ONLY public.document_hooks
ADD CONSTRAINT document_hooks_fk_branch_id_fkey FOREIGN KEY (fk_branch_id) REFERENCES public.document_branches(id) ON DELETE SET NULL;
ALTER TABLE ONLY public.document_hooks
ADD CONSTRAINT document_hooks_fk_document_id_fkey FOREIGN KEY (fk_document_id) REFERENCES public.documents(id) ON DELETE SET NULL;
ALTER TABLE ONLY public.document_hooks
ADD CONSTRAINT document_hooks_fk_organization_id_fkey FOREIGN KEY (fk_organization_id) REFERENCES public.organizations(id) ON DELETE SET NULL;
CREATE TABLE public.document_maintainers (
fk_document_id text NOT NULL,
fk_user_id text NOT NULL,
fk_organization_id text NOT NULL
);
ALTER TABLE ONLY public.document_maintainers
ADD CONSTRAINT document_maintainers_pkey PRIMARY KEY (fk_document_id, fk_user_id);
CREATE INDEX document_maintainers_fk_document_id_idx ON public.document_maintainers USING btree (fk_document_id);
ALTER TABLE ONLY public.document_maintainers
ADD CONSTRAINT document_maintainers_fk_document_id_fkey FOREIGN KEY (fk_document_id) REFERENCES public.documents(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.document_maintainers
ADD CONSTRAINT document_maintainers_fk_organization_id_fkey FOREIGN KEY (fk_organization_id) REFERENCES public.organizations(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.document_maintainers
ADD CONSTRAINT document_maintainers_fk_user_id_fkey FOREIGN KEY (fk_user_id) REFERENCES public.users(id) ON DELETE CASCADE;
CREATE TABLE public.documents (
id text NOT NULL,
sort_index integer NOT NULL,
fk_organization_id text NOT NULL,
fk_parent_id text,
created_at timestamp without time zone NOT NULL,
fk_created_by text,
updated_at timestamp without time zone NOT NULL,
fk_last_updated_by text
);
ALTER TABLE ONLY public.documents
ADD CONSTRAINT documents_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.documents
ADD CONSTRAINT documents_sort_index_key UNIQUE NULLS NOT DISTINCT (fk_organization_id, fk_parent_id, sort_index) DEFERRABLE;
CREATE INDEX documents_fk_created_by_idx ON public.documents USING btree (fk_created_by);
CREATE INDEX documents_fk_last_updated_by_idx ON public.documents USING btree (fk_last_updated_by);
CREATE INDEX documents_fk_organization_id_idx ON public.documents USING btree (fk_organization_id);
CREATE INDEX documents_fk_parent_id_idx ON public.documents USING btree (fk_parent_id);
ALTER TABLE ONLY public.documents
ADD CONSTRAINT documents_fk_created_by_fkey FOREIGN KEY (fk_created_by) REFERENCES public.users(id) ON DELETE SET NULL;
ALTER TABLE ONLY public.documents
ADD CONSTRAINT documents_fk_last_updated_by_fkey FOREIGN KEY (fk_last_updated_by) REFERENCES public.users(id) ON DELETE SET NULL;
ALTER TABLE ONLY public.documents
ADD CONSTRAINT documents_fk_organization_id_fkey FOREIGN KEY (fk_organization_id) REFERENCES public.organizations(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.documents
ADD CONSTRAINT documents_fk_parent_id_fkey FOREIGN KEY (fk_parent_id) REFERENCES public.documents(id) ON DELETE CASCADE;
CREATE TABLE public.github_installations (
installation_id numeric NOT NULL,
fk_organization_id text
);
ALTER TABLE ONLY public.github_installations
ADD CONSTRAINT github_installations_pkey PRIMARY KEY (installation_id);
CREATE INDEX github_installations_fk_organization_id_idx ON public.github_installations USING btree (fk_organization_id);
ALTER TABLE ONLY public.github_installations
ADD CONSTRAINT github_installations_fk_organization_id_fkey FOREIGN KEY (fk_organization_id) REFERENCES public.organizations(id) ON DELETE SET NULL;
CREATE TABLE public.jwks (
id text NOT NULL,
public_key text NOT NULL,
private_key text NOT NULL,
created_at timestamp with time zone NOT NULL,
expires_at timestamp with time zone,
alg text,
crv text
);
ALTER TABLE ONLY public.jwks
ADD CONSTRAINT jwks_pkey PRIMARY KEY (id);
CREATE TABLE public.notifications (
id text NOT NULL,
code text NOT NULL,
metadata jsonb NOT NULL,
fk_user_id text NOT NULL,
fk_organization_id text NOT NULL,
read boolean DEFAULT false NOT NULL,
created_at timestamp with time zone NOT NULL
);
ALTER TABLE ONLY public.notifications
ADD CONSTRAINT notifications_pkey PRIMARY KEY (id);
CREATE INDEX notifications_fk_organization_id_fk_user_id_idx ON public.notifications USING btree (fk_organization_id, fk_user_id);
CREATE INDEX notifications_fk_user_id_idx ON public.notifications USING btree (fk_user_id);
ALTER TABLE ONLY public.notifications
ADD CONSTRAINT notifications_fk_organization_id_fkey FOREIGN KEY (fk_organization_id) REFERENCES public.organizations(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.notifications
ADD CONSTRAINT notifications_fk_user_id_fkey FOREIGN KEY (fk_user_id) REFERENCES public.users(id) ON DELETE CASCADE;
CREATE TABLE public.oauth_access_tokens (
id text NOT NULL,
token text,
client_id text NOT NULL,
session_id text,
fk_user_id text,
reference_id text,
authorization_code_id text,
resources text,
requested_user_info_claims text,
fk_refresh_token_id text,
expires_at timestamp with time zone,
created_at timestamp with time zone,
revoked timestamp with time zone,
confirmation jsonb,
scopes text NOT NULL
);
ALTER TABLE ONLY public.oauth_access_tokens
ADD CONSTRAINT oauth_access_tokens_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.oauth_access_tokens
ADD CONSTRAINT oauth_access_tokens_token_key UNIQUE (token);
CREATE INDEX oauth_access_tokens_authorization_code_id_idx ON public.oauth_access_tokens USING btree (authorization_code_id);
CREATE INDEX oauth_access_tokens_client_id_idx ON public.oauth_access_tokens USING btree (client_id);
CREATE INDEX oauth_access_tokens_fk_refresh_token_id_idx ON public.oauth_access_tokens USING btree (fk_refresh_token_id);
CREATE INDEX oauth_access_tokens_fk_user_id_idx ON public.oauth_access_tokens USING btree (fk_user_id);
CREATE INDEX oauth_access_tokens_session_id_idx ON public.oauth_access_tokens USING btree (session_id);
ALTER TABLE ONLY public.oauth_access_tokens
ADD CONSTRAINT oauth_access_tokens_client_id_fkey FOREIGN KEY (client_id) REFERENCES public.oauth_clients(client_id) ON DELETE CASCADE;
ALTER TABLE ONLY public.oauth_access_tokens
ADD CONSTRAINT oauth_access_tokens_fk_refresh_token_id_fkey FOREIGN KEY (fk_refresh_token_id) REFERENCES public.oauth_refresh_tokens(id) ON DELETE SET NULL;
ALTER TABLE ONLY public.oauth_access_tokens
ADD CONSTRAINT oauth_access_tokens_fk_user_id_fkey FOREIGN KEY (fk_user_id) REFERENCES public.users(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.oauth_access_tokens
ADD CONSTRAINT oauth_access_tokens_session_id_fkey FOREIGN KEY (session_id) REFERENCES public.user_sessions(id) ON DELETE SET NULL;
CREATE TABLE public.oauth_client_assertions (
id text NOT NULL,
expires_at timestamp with time zone NOT NULL
);
ALTER TABLE ONLY public.oauth_client_assertions
ADD CONSTRAINT oauth_client_assertions_pkey PRIMARY KEY (id);
CREATE TABLE public.oauth_client_resources (
id text NOT NULL,
client_id text NOT NULL,
resource_id text NOT NULL,
metadata jsonb,
created_at timestamp with time zone
);
ALTER TABLE ONLY public.oauth_client_resources
ADD CONSTRAINT oauth_client_resources_pkey PRIMARY KEY (id);
CREATE INDEX oauth_client_resources_client_id_idx ON public.oauth_client_resources USING btree (client_id);
CREATE INDEX oauth_client_resources_resource_id_idx ON public.oauth_client_resources USING btree (resource_id);
ALTER TABLE ONLY public.oauth_client_resources
ADD CONSTRAINT oauth_client_resources_client_id_fkey FOREIGN KEY (client_id) REFERENCES public.oauth_clients(client_id) ON DELETE CASCADE;
ALTER TABLE ONLY public.oauth_client_resources
ADD CONSTRAINT oauth_client_resources_resource_id_fkey FOREIGN KEY (resource_id) REFERENCES public.oauth_resources(identifier) ON DELETE CASCADE;
CREATE TABLE public.oauth_clients (
id text NOT NULL,
client_id text NOT NULL,
client_secret text,
client_discovery_id text,
disabled boolean,
skip_consent boolean,
enable_end_session boolean,
subject_type text,
scopes text,
client_credentials_scopes text,
fk_user_id text,
created_at timestamp with time zone,
updated_at timestamp with time zone,
name text,
uri text,
icon text,
contacts text,
tos text,
policy text,
software_id text,
software_version text,
software_statement text,
redirect_uris text NOT NULL,
post_logout_redirect_uris text,
backchannel_logout_uri text,
backchannel_logout_session_required boolean,
token_endpoint_auth_method text,
application_type text,
jwks text,
jwks_uri text,
grant_types text,
response_types text,
require_pkce boolean,
dpop_bound_access_tokens boolean,
reference_id text,
metadata jsonb
);
ALTER TABLE ONLY public.oauth_clients
ADD CONSTRAINT oauth_clients_client_id_key UNIQUE (client_id);
ALTER TABLE ONLY public.oauth_clients
ADD CONSTRAINT oauth_clients_pkey PRIMARY KEY (id);
CREATE INDEX oauth_clients_fk_user_id_idx ON public.oauth_clients USING btree (fk_user_id);
ALTER TABLE ONLY public.oauth_clients
ADD CONSTRAINT oauth_clients_fk_user_id_fkey FOREIGN KEY (fk_user_id) REFERENCES public.users(id) ON DELETE CASCADE;
CREATE TABLE public.oauth_consents (
id text NOT NULL,
client_id text NOT NULL,
fk_user_id text,
reference_id text,
resources text,
requested_user_info_claims text,
scopes text NOT NULL,
created_at timestamp with time zone,
updated_at timestamp with time zone
);
ALTER TABLE ONLY public.oauth_consents
ADD CONSTRAINT oauth_consents_pkey PRIMARY KEY (id);
CREATE INDEX oauth_consents_client_id_fk_user_id_idx ON public.oauth_consents USING btree (client_id, fk_user_id);
ALTER TABLE ONLY public.oauth_consents
ADD CONSTRAINT oauth_consents_client_id_fkey FOREIGN KEY (client_id) REFERENCES public.oauth_clients(client_id) ON DELETE CASCADE;
ALTER TABLE ONLY public.oauth_consents
ADD CONSTRAINT oauth_consents_fk_user_id_fkey FOREIGN KEY (fk_user_id) REFERENCES public.users(id) ON DELETE CASCADE;
CREATE TABLE public.oauth_refresh_tokens (
id text NOT NULL,
token text NOT NULL,
client_id text NOT NULL,
session_id text,
fk_user_id text NOT NULL,
reference_id text,
authorization_code_id text,
resources text,
requested_user_info_claims text,
expires_at timestamp with time zone,
created_at timestamp with time zone,
revoked timestamp with time zone,
rotated_at timestamp with time zone,
rotation_replay_response text,
rotation_replay_expires_at timestamp with time zone,
auth_time timestamp with time zone,
confirmation jsonb,
scopes text NOT NULL
);
ALTER TABLE ONLY public.oauth_refresh_tokens
ADD CONSTRAINT oauth_refresh_tokens_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.oauth_refresh_tokens
ADD CONSTRAINT oauth_refresh_tokens_token_key UNIQUE (token);
CREATE INDEX oauth_refresh_tokens_authorization_code_id_idx ON public.oauth_refresh_tokens USING btree (authorization_code_id);
CREATE INDEX oauth_refresh_tokens_client_id_idx ON public.oauth_refresh_tokens USING btree (client_id);
CREATE INDEX oauth_refresh_tokens_fk_user_id_idx ON public.oauth_refresh_tokens USING btree (fk_user_id);
CREATE INDEX oauth_refresh_tokens_session_id_idx ON public.oauth_refresh_tokens USING btree (session_id);
ALTER TABLE ONLY public.oauth_refresh_tokens
ADD CONSTRAINT oauth_refresh_tokens_client_id_fkey FOREIGN KEY (client_id) REFERENCES public.oauth_clients(client_id) ON DELETE CASCADE;
ALTER TABLE ONLY public.oauth_refresh_tokens
ADD CONSTRAINT oauth_refresh_tokens_fk_user_id_fkey FOREIGN KEY (fk_user_id) REFERENCES public.users(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.oauth_refresh_tokens
ADD CONSTRAINT oauth_refresh_tokens_session_id_fkey FOREIGN KEY (session_id) REFERENCES public.user_sessions(id) ON DELETE SET NULL;
CREATE TABLE public.oauth_resources (
id text NOT NULL,
identifier text NOT NULL,
name text NOT NULL,
access_token_ttl integer,
refresh_token_ttl integer,
signing_algorithm text,
signing_key_id text,
allowed_scopes text,
custom_claims jsonb,
dpop_bound_access_tokens_required boolean,
disabled boolean,
created_at timestamp with time zone,
updated_at timestamp with time zone,
policy_version integer,
metadata jsonb
);
ALTER TABLE ONLY public.oauth_resources
ADD CONSTRAINT oauth_resources_identifier_key UNIQUE (identifier);
ALTER TABLE ONLY public.oauth_resources
ADD CONSTRAINT oauth_resources_pkey PRIMARY KEY (id);
CREATE TABLE public.organization_invitations (
id text NOT NULL,
fk_organization_id text NOT NULL,
email text NOT NULL,
role text,
status text NOT NULL,
expires_at timestamp with time zone NOT NULL,
created_at timestamp with time zone NOT NULL,
fk_inviter_id text NOT NULL
);
ALTER TABLE ONLY public.organization_invitations
ADD CONSTRAINT organization_invitations_pkey PRIMARY KEY (id);
CREATE INDEX organization_invitations_email_idx ON public.organization_invitations USING btree (email);
CREATE INDEX organization_invitations_organization_id_idx ON public.organization_invitations USING btree (fk_organization_id);
ALTER TABLE ONLY public.organization_invitations
ADD CONSTRAINT organization_invitations_fk_inviter_id_fkey FOREIGN KEY (fk_inviter_id) REFERENCES public.users(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.organization_invitations
ADD CONSTRAINT organization_invitations_fk_organization_id_fkey FOREIGN KEY (fk_organization_id) REFERENCES public.organizations(id) ON DELETE CASCADE;
CREATE TABLE public.organization_members (
id text NOT NULL,
fk_organization_id text NOT NULL,
fk_user_id text NOT NULL,
role text NOT NULL,
created_at timestamp with time zone NOT NULL
);
ALTER TABLE ONLY public.organization_members
ADD CONSTRAINT organization_members_pkey PRIMARY KEY (id);
CREATE INDEX organization_members_organization_id_idx ON public.organization_members USING btree (fk_organization_id);
CREATE INDEX organization_members_user_id_idx ON public.organization_members USING btree (fk_user_id);
ALTER TABLE ONLY public.organization_members
ADD CONSTRAINT organization_members_fk_organization_id_fkey FOREIGN KEY (fk_organization_id) REFERENCES public.organizations(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.organization_members
ADD CONSTRAINT organization_members_fk_user_id_fkey FOREIGN KEY (fk_user_id) REFERENCES public.users(id) ON DELETE CASCADE;
CREATE TABLE public.organizations (
id text NOT NULL,
name text NOT NULL,
slug text NOT NULL,
logo text,
created_at timestamp with time zone NOT NULL,
metadata text
);
ALTER TABLE ONLY public.organizations
ADD CONSTRAINT organizations_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.organizations
ADD CONSTRAINT organizations_slug_key UNIQUE (slug);
CREATE TABLE public.personal_variable_groups (
id text NOT NULL,
fk_organization_id text NOT NULL,
group_name text NOT NULL,
color text NOT NULL,
sort_index integer NOT NULL,
builtin boolean NOT NULL,
created_at timestamp without time zone NOT NULL,
fk_created_by text
);
ALTER TABLE ONLY public.personal_variable_groups
ADD CONSTRAINT personal_variable_groups_fk_organization_id_group_name_key UNIQUE (fk_organization_id, group_name);
ALTER TABLE ONLY public.personal_variable_groups
ADD CONSTRAINT personal_variable_groups_pkey PRIMARY KEY (id);
CREATE INDEX personal_variable_groups_fk_created_by_idx ON public.personal_variable_groups USING btree (fk_created_by);
ALTER TABLE ONLY public.personal_variable_groups
ADD CONSTRAINT personal_variable_groups_fk_created_by_fkey FOREIGN KEY (fk_created_by) REFERENCES public.users(id) ON DELETE SET NULL;
ALTER TABLE ONLY public.personal_variable_groups
ADD CONSTRAINT personal_variable_groups_fk_organization_id_fkey FOREIGN KEY (fk_organization_id) REFERENCES public.organizations(id) ON DELETE CASCADE;
CREATE TABLE public.personal_variable_options (
id text NOT NULL,
fk_variable_id text NOT NULL,
option_value text NOT NULL,
sort_index integer NOT NULL
);
ALTER TABLE ONLY public.personal_variable_options
ADD CONSTRAINT personal_variable_options_pkey PRIMARY KEY (id);
CREATE INDEX personal_variable_options_fk_variable_id_idx ON public.personal_variable_options USING btree (fk_variable_id);
ALTER TABLE ONLY public.personal_variable_options
ADD CONSTRAINT personal_variable_options_fk_variable_id_fkey FOREIGN KEY (fk_variable_id) REFERENCES public.personal_variables(id) ON DELETE CASCADE;
CREATE TABLE public.personal_variable_values (
fk_variable_id text NOT NULL,
fk_user_id text NOT NULL,
fk_organization_id text NOT NULL,
value text NOT NULL,
updated_at timestamp without time zone NOT NULL
);
ALTER TABLE ONLY public.personal_variable_values
ADD CONSTRAINT personal_variable_values_pkey PRIMARY KEY (fk_variable_id, fk_user_id);
CREATE INDEX personal_variable_values_fk_organization_id_idx ON public.personal_variable_values USING btree (fk_organization_id);
CREATE INDEX personal_variable_values_fk_user_id_idx ON public.personal_variable_values USING btree (fk_user_id);
ALTER TABLE ONLY public.personal_variable_values
ADD CONSTRAINT personal_variable_values_fk_organization_id_fkey FOREIGN KEY (fk_organization_id) REFERENCES public.organizations(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.personal_variable_values
ADD CONSTRAINT personal_variable_values_fk_user_id_fkey FOREIGN KEY (fk_user_id) REFERENCES public.users(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.personal_variable_values
ADD CONSTRAINT personal_variable_values_fk_variable_id_fkey FOREIGN KEY (fk_variable_id) REFERENCES public.personal_variables(id) ON DELETE CASCADE;
CREATE TABLE public.personal_variables (
id text NOT NULL,
fk_organization_id text NOT NULL,
fk_variable_group_id text NOT NULL,
variable_key text NOT NULL,
variable_name text NOT NULL,
description text,
variable_type text NOT NULL,
default_value text,
sort_index integer NOT NULL,
builtin boolean NOT NULL,
created_at timestamp without time zone NOT NULL,
fk_created_by text,
CONSTRAINT personal_variables_variable_type_check CHECK ((variable_type = ANY (ARRAY['list'::text, 'number'::text, 'text'::text, 'time-range'::text])))
);
ALTER TABLE ONLY public.personal_variables
ADD CONSTRAINT personal_variables_fk_organization_id_variable_key_key UNIQUE (fk_organization_id, variable_key);
ALTER TABLE ONLY public.personal_variables
ADD CONSTRAINT personal_variables_pkey PRIMARY KEY (id);
CREATE INDEX personal_variables_fk_created_by_idx ON public.personal_variables USING btree (fk_created_by);
CREATE INDEX personal_variables_fk_variable_group_id_idx ON public.personal_variables USING btree (fk_variable_group_id);
ALTER TABLE ONLY public.personal_variables
ADD CONSTRAINT personal_variables_fk_created_by_fkey FOREIGN KEY (fk_created_by) REFERENCES public.users(id) ON DELETE SET NULL;
ALTER TABLE ONLY public.personal_variables
ADD CONSTRAINT personal_variables_fk_organization_id_fkey FOREIGN KEY (fk_organization_id) REFERENCES public.organizations(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.personal_variables
ADD CONSTRAINT personal_variables_fk_variable_group_id_fkey FOREIGN KEY (fk_variable_group_id) REFERENCES public.personal_variable_groups(id);
CREATE TABLE public.search_jobs (
id bigint NOT NULL,
version bigint DEFAULT 1 NOT NULL,
organization_id text NOT NULL,
document_id text,
branch_id text
);
CREATE SEQUENCE public.search_jobs_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE public.search_jobs_id_seq OWNED BY public.search_jobs.id;
ALTER TABLE ONLY public.search_jobs ALTER COLUMN id SET DEFAULT nextval('public.search_jobs_id_seq'::regclass);
ALTER TABLE ONLY public.search_jobs
ADD CONSTRAINT search_jobs_organization_id_document_id_branch_id_key UNIQUE NULLS NOT DISTINCT (organization_id, document_id, branch_id);
ALTER TABLE ONLY public.search_jobs
ADD CONSTRAINT search_jobs_pkey PRIMARY KEY (id);
CREATE TABLE public.slack_apps (
team_id text NOT NULL,
fk_organization_id text,
token text NOT NULL
);
ALTER TABLE ONLY public.slack_apps
ADD CONSTRAINT slack_apps_pkey PRIMARY KEY (team_id);
CREATE INDEX slack_apps_fk_organization_id_idx ON public.slack_apps USING btree (fk_organization_id);
ALTER TABLE ONLY public.slack_apps
ADD CONSTRAINT slack_apps_fk_organization_id_fkey FOREIGN KEY (fk_organization_id) REFERENCES public.organizations(id) ON DELETE SET NULL;
CREATE TABLE public.slack_messages (
id text NOT NULL,
fk_organization_id text NOT NULL,
text text NOT NULL,
created_at timestamp without time zone NOT NULL
);
ALTER TABLE ONLY public.slack_messages
ADD CONSTRAINT slack_messages_pkey PRIMARY KEY (id);
CREATE INDEX slack_messages_fk_organization_id_created_at_idx ON public.slack_messages USING btree (fk_organization_id, created_at DESC);
ALTER TABLE ONLY public.slack_messages
ADD CONSTRAINT slack_messages_fk_organization_id_fkey FOREIGN KEY (fk_organization_id) REFERENCES public.organizations(id) ON DELETE CASCADE;
CREATE TABLE public.slack_user_links (
slack_user_id text NOT NULL,
fk_team_id text NOT NULL,
fk_user_id text NOT NULL,
settings bytea DEFAULT '\x7b7d'::bytea NOT NULL,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
);
ALTER TABLE ONLY public.slack_user_links
ADD CONSTRAINT slack_user_links_pkey PRIMARY KEY (slack_user_id, fk_team_id);
CREATE INDEX slack_user_links_fk_team_id_fk_user_id_idx ON public.slack_user_links USING btree (fk_team_id, fk_user_id);
CREATE INDEX slack_user_links_fk_user_id_idx ON public.slack_user_links USING btree (fk_user_id);
ALTER TABLE ONLY public.slack_user_links
ADD CONSTRAINT slack_user_links_fk_team_id_fkey FOREIGN KEY (fk_team_id) REFERENCES public.slack_apps(team_id) ON DELETE CASCADE;
ALTER TABLE ONLY public.slack_user_links
ADD CONSTRAINT slack_user_links_fk_user_id_fkey FOREIGN KEY (fk_user_id) REFERENCES public.users(id) ON DELETE CASCADE;
CREATE TABLE public.tags (
id text NOT NULL,
fk_organization_id text NOT NULL,
tag_name text NOT NULL,
color text NOT NULL,
sort_index integer NOT NULL,
created_at timestamp without time zone NOT NULL,
fk_created_by text
);
ALTER TABLE ONLY public.tags
ADD CONSTRAINT tags_fk_organization_id_tag_name_key UNIQUE (fk_organization_id, tag_name);
ALTER TABLE ONLY public.tags
ADD CONSTRAINT tags_pkey PRIMARY KEY (id);
CREATE INDEX tags_fk_created_by_idx ON public.tags USING btree (fk_created_by);
CREATE INDEX tags_fk_organization_id_idx ON public.tags USING btree (fk_organization_id);
ALTER TABLE ONLY public.tags
ADD CONSTRAINT tags_fk_created_by_fkey FOREIGN KEY (fk_created_by) REFERENCES public.users(id) ON DELETE SET NULL;
ALTER TABLE ONLY public.tags
ADD CONSTRAINT tags_fk_organization_id_fkey FOREIGN KEY (fk_organization_id) REFERENCES public.organizations(id) ON DELETE CASCADE;
CREATE TABLE public.user_accounts (
id text NOT NULL,
account_id text NOT NULL,
provider_id text NOT NULL,
fk_user_id text NOT NULL,
access_token text,
refresh_token text,
id_token text,
access_token_expires_at timestamp with time zone,
refresh_token_expires_at timestamp with time zone,
scope text,
password text,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp with time zone NOT NULL
);
ALTER TABLE ONLY public.user_accounts
ADD CONSTRAINT user_accounts_pkey PRIMARY KEY (id);
CREATE INDEX user_accounts_user_id_idx ON public.user_accounts USING btree (fk_user_id);
ALTER TABLE ONLY public.user_accounts
ADD CONSTRAINT user_accounts_fk_user_id_fkey FOREIGN KEY (fk_user_id) REFERENCES public.users(id) ON DELETE CASCADE;
CREATE TABLE public.user_sessions (
id text NOT NULL,
expires_at timestamp with time zone NOT NULL,
token text NOT NULL,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
ip_address text,
user_agent text,
fk_user_id text NOT NULL,
active_organization_id text
);
ALTER TABLE ONLY public.user_sessions
ADD CONSTRAINT user_sessions_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.user_sessions
ADD CONSTRAINT user_sessions_token_key UNIQUE (token);
CREATE INDEX user_sessions_fk_user_id_idx ON public.user_sessions USING btree (fk_user_id);
ALTER TABLE ONLY public.user_sessions
ADD CONSTRAINT user_sessions_fk_user_id_fkey FOREIGN KEY (fk_user_id) REFERENCES public.users(id) ON DELETE CASCADE;
CREATE TABLE public.user_tag_settings (
fk_user_id text NOT NULL,
fk_tag_id text NOT NULL,
hidden boolean DEFAULT false NOT NULL
);
ALTER TABLE ONLY public.user_tag_settings
ADD CONSTRAINT user_tag_settings_pkey PRIMARY KEY (fk_user_id, fk_tag_id);
CREATE INDEX user_tag_settings_fk_tag_id_idx ON public.user_tag_settings USING btree (fk_tag_id);
ALTER TABLE ONLY public.user_tag_settings
ADD CONSTRAINT user_tag_settings_fk_tag_id_fkey FOREIGN KEY (fk_tag_id) REFERENCES public.tags(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.user_tag_settings
ADD CONSTRAINT user_tag_settings_fk_user_id_fkey FOREIGN KEY (fk_user_id) REFERENCES public.users(id) ON DELETE CASCADE;
CREATE TABLE public.user_verifications (
id text NOT NULL,
identifier text NOT NULL,
value text NOT NULL,
expires_at timestamp with time zone NOT NULL,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
);
ALTER TABLE ONLY public.user_verifications
ADD CONSTRAINT user_verifications_pkey PRIMARY KEY (id);
CREATE INDEX user_verifications_identifier_idx ON public.user_verifications USING btree (identifier);
CREATE TABLE public.users (
id text NOT NULL,
name text NOT NULL,
email text NOT NULL,
email_verified boolean NOT NULL,
image text,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
);
ALTER TABLE ONLY public.users
ADD CONSTRAINT users_email_key UNIQUE (email);
ALTER TABLE ONLY public.users
ADD CONSTRAINT users_pkey PRIMARY KEY (id);