mirror of
https://github.com/domfelipe/mika-agent-assist.git
synced 2026-08-07 12:56:51 +00:00
76 lines
No EOL
3.3 KiB
SQL
76 lines
No EOL
3.3 KiB
SQL
-- ============================================================
|
|
-- FASE 3 — Telegram onboarding: schema
|
|
-- ============================================================
|
|
|
|
-- 1) Novas colunas em agent_instances --------------------------
|
|
ALTER TABLE public.agent_instances
|
|
ADD COLUMN IF NOT EXISTS telegram_webhook_configured boolean NOT NULL DEFAULT false,
|
|
ADD COLUMN IF NOT EXISTS telegram_webhook_secret text,
|
|
ADD COLUMN IF NOT EXISTS telegram_token_invalid boolean NOT NULL DEFAULT false,
|
|
ADD COLUMN IF NOT EXISTS telegram_first_message_received_at timestamptz,
|
|
ADD COLUMN IF NOT EXISTS telegram_connected_at timestamptz,
|
|
ADD COLUMN IF NOT EXISTS telegram_onboarding_completed boolean NOT NULL DEFAULT false;
|
|
|
|
-- Índice parcial em username (busca rápida e garante 1 bot por conta)
|
|
CREATE INDEX IF NOT EXISTS agent_instances_telegram_username_idx
|
|
ON public.agent_instances (telegram_bot_username)
|
|
WHERE telegram_bot_username IS NOT NULL;
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS agent_instances_telegram_username_unique
|
|
ON public.agent_instances (telegram_bot_username)
|
|
WHERE telegram_bot_username IS NOT NULL;
|
|
|
|
-- 2) Tabela telegram_messages_log ------------------------------
|
|
CREATE TABLE IF NOT EXISTS public.telegram_messages_log (
|
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
agent_instance_id uuid NOT NULL REFERENCES public.agent_instances(id) ON DELETE CASCADE,
|
|
user_id uuid NOT NULL REFERENCES public.profiles(id) ON DELETE CASCADE,
|
|
telegram_chat_id bigint NOT NULL,
|
|
telegram_user_id bigint,
|
|
telegram_username text,
|
|
direction text NOT NULL CHECK (direction IN ('incoming','outgoing')),
|
|
message_text text,
|
|
message_type text NOT NULL DEFAULT 'text' CHECK (message_type IN ('text','command','other')),
|
|
is_first_message boolean NOT NULL DEFAULT false,
|
|
raw_payload jsonb,
|
|
created_at timestamptz NOT NULL DEFAULT now()
|
|
);
|
|
|
|
ALTER TABLE public.telegram_messages_log ENABLE ROW LEVEL SECURITY;
|
|
|
|
CREATE POLICY "Usuários veem o próprio log de mensagens"
|
|
ON public.telegram_messages_log
|
|
FOR SELECT
|
|
USING (auth.uid() = user_id);
|
|
|
|
-- Sem policies de INSERT/UPDATE/DELETE: somente service_role (Edge Function)
|
|
|
|
CREATE INDEX IF NOT EXISTS telegram_messages_log_agent_idx
|
|
ON public.telegram_messages_log (agent_instance_id);
|
|
|
|
CREATE INDEX IF NOT EXISTS telegram_messages_log_user_idx
|
|
ON public.telegram_messages_log (user_id);
|
|
|
|
CREATE INDEX IF NOT EXISTS telegram_messages_log_created_idx
|
|
ON public.telegram_messages_log (created_at DESC);
|
|
|
|
CREATE INDEX IF NOT EXISTS telegram_messages_log_first_message_idx
|
|
ON public.telegram_messages_log (agent_instance_id)
|
|
WHERE is_first_message = true;
|
|
|
|
CREATE INDEX IF NOT EXISTS telegram_messages_log_agent_direction_idx
|
|
ON public.telegram_messages_log (agent_instance_id, direction, created_at DESC);
|
|
|
|
-- 3) Tabela telegram_rate_limit_bucket -------------------------
|
|
CREATE TABLE IF NOT EXISTS public.telegram_rate_limit_bucket (
|
|
agent_instance_id uuid PRIMARY KEY REFERENCES public.agent_instances(id) ON DELETE CASCADE,
|
|
window_start timestamptz NOT NULL DEFAULT now(),
|
|
request_count int NOT NULL DEFAULT 0,
|
|
updated_at timestamptz NOT NULL DEFAULT now()
|
|
);
|
|
|
|
ALTER TABLE public.telegram_rate_limit_bucket ENABLE ROW LEVEL SECURITY;
|
|
-- Sem policies: somente service_role
|
|
|
|
-- 4) Realtime --------------------------------------------------
|
|
ALTER PUBLICATION supabase_realtime ADD TABLE public.telegram_messages_log; |