-- Generated by aether-data-schema from schema/logical/*.toml.
-- Do not edit generated files directly; edit logical schema or explicit overrides instead.

CREATE TABLE IF NOT EXISTS public.system_configs (
    id character varying(64) NOT NULL,
    key character varying(255) NOT NULL,
    value text NOT NULL,
    description text,
    created_at bigint NOT NULL,
    updated_at bigint NOT NULL
);

ALTER TABLE ONLY public.system_configs ADD CONSTRAINT system_configs_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.system_configs ADD CONSTRAINT system_configs_key_key UNIQUE (key);

CREATE TABLE IF NOT EXISTS public.auth_modules (
    id character varying(64) NOT NULL,
    module_type character varying(128) NOT NULL,
    enabled boolean DEFAULT true NOT NULL,
    config jsonb NOT NULL,
    created_at bigint NOT NULL,
    updated_at bigint NOT NULL
);

ALTER TABLE ONLY public.auth_modules ADD CONSTRAINT auth_modules_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.auth_modules ADD CONSTRAINT auth_modules_module_type_key UNIQUE (module_type);

CREATE TABLE IF NOT EXISTS public.oauth_providers (
    provider_type character varying(64) NOT NULL,
    display_name character varying(255) NOT NULL,
    client_id text NOT NULL,
    client_secret_encrypted text,
    authorization_url_override character varying(500),
    token_url_override character varying(500),
    userinfo_url_override character varying(500),
    scopes jsonb,
    redirect_uri character varying(500) NOT NULL,
    frontend_callback_url character varying(500) NOT NULL,
    attribute_mapping jsonb,
    extra_config jsonb,
    icon_url character varying(500),
    is_enabled boolean DEFAULT false NOT NULL,
    created_at bigint NOT NULL,
    updated_at bigint NOT NULL
);

ALTER TABLE ONLY public.oauth_providers ADD CONSTRAINT oauth_providers_pkey PRIMARY KEY (provider_type);

CREATE TABLE IF NOT EXISTS public.ldap_configs (
    id bigserial NOT NULL,
    server_url character varying(255) NOT NULL,
    bind_dn text NOT NULL,
    bind_password_encrypted text,
    base_dn text NOT NULL,
    user_search_filter character varying(512) DEFAULT '(uid={username})' NOT NULL,
    username_attr character varying(50) DEFAULT 'uid' NOT NULL,
    email_attr character varying(50) DEFAULT 'mail' NOT NULL,
    display_name_attr character varying(50) DEFAULT 'cn' NOT NULL,
    is_enabled boolean DEFAULT false NOT NULL,
    is_exclusive boolean DEFAULT false NOT NULL,
    use_starttls boolean DEFAULT false NOT NULL,
    connect_timeout integer DEFAULT 10 NOT NULL,
    created_at bigint NOT NULL,
    updated_at bigint NOT NULL
);

ALTER TABLE ONLY public.ldap_configs ADD CONSTRAINT ldap_configs_pkey PRIMARY KEY (id);

CREATE TABLE IF NOT EXISTS public.user_oauth_links (
    id character varying(64) NOT NULL,
    user_id character varying(64) NOT NULL,
    provider_type character varying(64) NOT NULL,
    provider_user_id character varying(255) NOT NULL,
    provider_username character varying(255),
    provider_email character varying(255),
    extra_data jsonb,
    linked_at bigint NOT NULL,
    last_login_at bigint
);

ALTER TABLE ONLY public.user_oauth_links ADD CONSTRAINT user_oauth_links_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.user_oauth_links ADD CONSTRAINT uq_user_oauth_links_provider_user UNIQUE (provider_type, provider_user_id);
ALTER TABLE ONLY public.user_oauth_links ADD CONSTRAINT uq_user_oauth_links_user_provider UNIQUE (user_id, provider_type);
CREATE INDEX IF NOT EXISTS user_oauth_links_provider_type_idx ON public.user_oauth_links USING btree (provider_type);
CREATE INDEX IF NOT EXISTS user_oauth_links_user_id_idx ON public.user_oauth_links USING btree (user_id);

