CREATE TABLE public.bots ( id uuid DEFAULT gen_random_uuid() NOT NULL, "name" varchar(255) NOT NULL, description text NULL, llm_provider varchar(100) NOT NULL, llm_config jsonb DEFAULT '{}'::jsonb NOT NULL, context_provider varchar(100) NOT NULL, context_config jsonb DEFAULT '{}'::jsonb NOT NULL, created_at timestamptz DEFAULT now() NOT NULL, updated_at timestamptz DEFAULT now() NOT NULL, is_active bool DEFAULT true NULL, CONSTRAINT bots_pkey PRIMARY KEY (id) ); -- public.clicks definition -- Drop table -- DROP TABLE public.clicks; CREATE TABLE public.clicks ( campaign_id text NOT NULL, email text NOT NULL, updated_at timestamptz DEFAULT now() NULL, CONSTRAINT clicks_campaign_id_email_key UNIQUE (campaign_id, email) ); -- public.organizations definition -- Drop table -- DROP TABLE public.organizations; CREATE TABLE public.organizations ( org_id uuid DEFAULT gen_random_uuid() NOT NULL, "name" varchar(255) NOT NULL, slug varchar(255) NOT NULL, created_at timestamptz DEFAULT now() NOT NULL, updated_at timestamptz DEFAULT now() NOT NULL, CONSTRAINT organizations_pkey PRIMARY KEY (org_id), CONSTRAINT organizations_slug_key UNIQUE (slug) ); CREATE INDEX idx_organizations_created_at ON public.organizations USING btree (created_at); CREATE INDEX idx_organizations_slug ON public.organizations USING btree (slug); -- public.system_automations definition -- Drop table -- DROP TABLE public.system_automations; CREATE TABLE public.system_automations ( id uuid DEFAULT gen_random_uuid() NOT NULL, bot_id uuid NOT NULL, kind int4 NOT NULL, "target" varchar(32) NULL, schedule bpchar(12) NULL, param varchar(32) NOT NULL, is_active bool DEFAULT true NOT NULL, last_triggered timestamptz NULL, created_at timestamptz DEFAULT now() NOT NULL, CONSTRAINT system_automations_pkey PRIMARY KEY (id) ); CREATE INDEX idx_system_automations_active ON public.system_automations USING btree (kind) WHERE is_active; -- public.tools definition -- Drop table -- DROP TABLE public.tools; CREATE TABLE public.tools ( id uuid DEFAULT gen_random_uuid() NOT NULL, "name" varchar(255) NOT NULL, description text NOT NULL, parameters jsonb DEFAULT '{}'::jsonb NOT NULL, script text NOT NULL, is_active bool DEFAULT true NULL, created_at timestamptz DEFAULT now() NOT NULL, CONSTRAINT tools_name_key UNIQUE (name), CONSTRAINT tools_pkey PRIMARY KEY (id) ); -- public.users definition -- Drop table -- DROP TABLE public.users; CREATE TABLE public.users ( id uuid DEFAULT gen_random_uuid() NOT NULL, username varchar(255) NOT NULL, email varchar(255) NOT NULL, password_hash varchar(255) NOT NULL, phone_number varchar(50) NULL, created_at timestamptz DEFAULT now() NOT NULL, updated_at timestamptz DEFAULT now() NOT NULL, is_active bool DEFAULT true NULL, CONSTRAINT users_email_key UNIQUE (email), CONSTRAINT users_pkey PRIMARY KEY (id), CONSTRAINT users_username_key UNIQUE (username) ); -- public.bot_channels definition -- Drop table -- DROP TABLE public.bot_channels; CREATE TABLE public.bot_channels ( id uuid DEFAULT gen_random_uuid() NOT NULL, bot_id uuid NOT NULL, channel_type int4 NOT NULL, config jsonb DEFAULT '{}'::jsonb NOT NULL, is_active bool DEFAULT true NULL, created_at timestamptz DEFAULT now() NOT NULL, CONSTRAINT bot_channels_bot_id_channel_type_key UNIQUE (bot_id, channel_type), CONSTRAINT bot_channels_pkey PRIMARY KEY (id), CONSTRAINT bot_channels_bot_id_fkey FOREIGN KEY (bot_id) REFERENCES public.bots(id) ON DELETE CASCADE ); CREATE INDEX idx_bot_channels_type ON public.bot_channels USING btree (channel_type) WHERE is_active; -- public.user_sessions definition -- Drop table -- DROP TABLE public.user_sessions; CREATE TABLE public.user_sessions ( id uuid DEFAULT gen_random_uuid() NOT NULL, user_id uuid NOT NULL, bot_id uuid NOT NULL, title varchar(500) DEFAULT 'New Conversation'::character varying NOT NULL, answer_mode int4 DEFAULT 0 NOT NULL, context_data jsonb DEFAULT '{}'::jsonb NOT NULL, current_tool varchar(255) NULL, message_count int4 DEFAULT 0 NOT NULL, total_tokens int4 DEFAULT 0 NOT NULL, created_at timestamptz DEFAULT now() NOT NULL, updated_at timestamptz DEFAULT now() NOT NULL, last_activity timestamptz DEFAULT now() NOT NULL, CONSTRAINT user_sessions_pkey PRIMARY KEY (id), CONSTRAINT user_sessions_bot_id_fkey FOREIGN KEY (bot_id) REFERENCES public.bots(id) ON DELETE CASCADE, CONSTRAINT user_sessions_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE ); CREATE INDEX idx_user_sessions_updated_at ON public.user_sessions USING btree (updated_at); CREATE INDEX idx_user_sessions_user_bot ON public.user_sessions USING btree (user_id, bot_id); -- public.whatsapp_numbers definition -- Drop table -- DROP TABLE public.whatsapp_numbers; CREATE TABLE public.whatsapp_numbers ( id uuid DEFAULT gen_random_uuid() NOT NULL, bot_id uuid NOT NULL, phone_number varchar(50) NOT NULL, is_active bool DEFAULT true NULL, created_at timestamptz DEFAULT now() NOT NULL, CONSTRAINT whatsapp_numbers_phone_number_bot_id_key UNIQUE (phone_number, bot_id), CONSTRAINT whatsapp_numbers_pkey PRIMARY KEY (id), CONSTRAINT whatsapp_numbers_bot_id_fkey FOREIGN KEY (bot_id) REFERENCES public.bots(id) ON DELETE CASCADE ); -- public.context_injections definition -- Drop table -- DROP TABLE public.context_injections; CREATE TABLE public.context_injections ( id uuid DEFAULT gen_random_uuid() NOT NULL, session_id uuid NOT NULL, injected_by uuid NOT NULL, context_data jsonb NOT NULL, reason text NULL, created_at timestamptz DEFAULT now() NOT NULL, CONSTRAINT context_injections_pkey PRIMARY KEY (id), CONSTRAINT context_injections_injected_by_fkey FOREIGN KEY (injected_by) REFERENCES public.users(id) ON DELETE CASCADE, CONSTRAINT context_injections_session_id_fkey FOREIGN KEY (session_id) REFERENCES public.user_sessions(id) ON DELETE CASCADE ); -- public.message_history definition -- Drop table -- DROP TABLE public.message_history; CREATE TABLE public.message_history ( id uuid DEFAULT gen_random_uuid() NOT NULL, session_id uuid NOT NULL, user_id uuid NOT NULL, "role" int4 NOT NULL, content_encrypted text NOT NULL, message_type int4 DEFAULT 0 NOT NULL, media_url text NULL, token_count int4 DEFAULT 0 NOT NULL, processing_time_ms int4 NULL, llm_model varchar(100) NULL, created_at timestamptz DEFAULT now() NOT NULL, message_index int4 NOT NULL, CONSTRAINT message_history_pkey PRIMARY KEY (id), CONSTRAINT message_history_session_id_fkey FOREIGN KEY (session_id) REFERENCES public.user_sessions(id) ON DELETE CASCADE, CONSTRAINT message_history_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE ); CREATE INDEX idx_message_history_created_at ON public.message_history USING btree (created_at); CREATE INDEX idx_message_history_session_id ON public.message_history USING btree (session_id); -- public.usage_analytics definition -- Drop table -- DROP TABLE public.usage_analytics; CREATE TABLE public.usage_analytics ( id uuid DEFAULT gen_random_uuid() NOT NULL, user_id uuid NOT NULL, bot_id uuid NOT NULL, session_id uuid NOT NULL, "date" date DEFAULT CURRENT_DATE NOT NULL, message_count int4 DEFAULT 0 NOT NULL, total_tokens int4 DEFAULT 0 NOT NULL, total_processing_time_ms int4 DEFAULT 0 NOT NULL, CONSTRAINT usage_analytics_pkey PRIMARY KEY (id), CONSTRAINT usage_analytics_bot_id_fkey FOREIGN KEY (bot_id) REFERENCES public.bots(id) ON DELETE CASCADE, CONSTRAINT usage_analytics_session_id_fkey FOREIGN KEY (session_id) REFERENCES public.user_sessions(id) ON DELETE CASCADE, CONSTRAINT usage_analytics_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE ); CREATE INDEX idx_usage_analytics_date ON public.usage_analytics USING btree (date);