mirror of
https://github.com/domfelipe/mika-agent-assist.git
synced 2026-08-07 15:36:49 +00:00
62 lines
No EOL
2.2 KiB
PL/PgSQL
62 lines
No EOL
2.2 KiB
PL/PgSQL
-- Migrar tabela subscriptions para o formato Paddle
|
|
ALTER TABLE public.subscriptions
|
|
ADD COLUMN IF NOT EXISTS paddle_subscription_id text,
|
|
ADD COLUMN IF NOT EXISTS paddle_customer_id text,
|
|
ADD COLUMN IF NOT EXISTS product_id text,
|
|
ADD COLUMN IF NOT EXISTS price_id text,
|
|
ADD COLUMN IF NOT EXISTS environment text NOT NULL DEFAULT 'sandbox';
|
|
|
|
-- Índices
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_subscriptions_paddle_id
|
|
ON public.subscriptions(paddle_subscription_id)
|
|
WHERE paddle_subscription_id IS NOT NULL;
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_subscriptions_user_id ON public.subscriptions(user_id);
|
|
|
|
-- Constraint única (user_id, environment) para upsert idempotente do webhook
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_subscriptions_user_env
|
|
ON public.subscriptions(user_id, environment);
|
|
|
|
-- Adicionar paddle_customer_id ao profiles (substitui stripe_customer_id conceitualmente)
|
|
ALTER TABLE public.profiles
|
|
ADD COLUMN IF NOT EXISTS paddle_customer_id text;
|
|
|
|
-- Função utilitária para checar assinatura ativa
|
|
CREATE OR REPLACE FUNCTION public.has_active_subscription(
|
|
user_uuid uuid,
|
|
check_env text DEFAULT 'live'
|
|
)
|
|
RETURNS boolean
|
|
LANGUAGE sql
|
|
STABLE
|
|
SECURITY DEFINER
|
|
SET search_path = public
|
|
AS $$
|
|
SELECT EXISTS (
|
|
SELECT 1 FROM public.subscriptions
|
|
WHERE user_id = user_uuid
|
|
AND environment = check_env
|
|
AND status IN ('active', 'trialing')
|
|
AND (current_period_end IS NULL OR current_period_end > now())
|
|
);
|
|
$$;
|
|
|
|
-- Trigger updated_at na subscriptions
|
|
DROP TRIGGER IF EXISTS update_subscriptions_updated_at ON public.subscriptions;
|
|
CREATE TRIGGER update_subscriptions_updated_at
|
|
BEFORE UPDATE ON public.subscriptions
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION public.update_updated_at_column();
|
|
|
|
-- Tabela de eventos de webhook (idempotência) — renomeando conceitualmente para paddle
|
|
CREATE TABLE IF NOT EXISTS public.paddle_webhook_events (
|
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
paddle_event_id text NOT NULL UNIQUE,
|
|
event_type text NOT NULL,
|
|
environment text NOT NULL,
|
|
payload jsonb,
|
|
processed_at timestamptz NOT NULL DEFAULT now()
|
|
);
|
|
|
|
ALTER TABLE public.paddle_webhook_events ENABLE ROW LEVEL SECURITY;
|
|
-- Sem políticas: apenas service_role acessa |