Files
agenciapsilmno/src/sql-arquivos/06_insurance_plan_services_v2.sql
2026-03-13 21:09:34 -03:00

59 lines
2.3 KiB
SQL

-- Migration: 06_insurance_plan_services_v2
-- Reestrutura insurance_plan_services para ser autônomo (sem FK para services)
-- Adiciona campo name, active e remove service_id
-- Passo 1: remover a tabela antiga se existir e recriar do zero
DROP TABLE IF EXISTS public.insurance_plan_services;
-- Passo 2: criar tabela nova autônoma
CREATE TABLE public.insurance_plan_services (
id uuid DEFAULT gen_random_uuid() NOT NULL,
insurance_plan_id uuid NOT NULL,
name text NOT NULL,
value numeric(10,2) NOT NULL,
active boolean DEFAULT true NOT NULL,
created_at timestamptz DEFAULT now(),
updated_at timestamptz DEFAULT now(),
CONSTRAINT insurance_plan_services_pkey PRIMARY KEY (id),
CONSTRAINT insurance_plan_services_plan_fkey
FOREIGN KEY (insurance_plan_id) REFERENCES public.insurance_plans(id) ON DELETE CASCADE
);
-- Passo 3: RLS
ALTER TABLE public.insurance_plan_services ENABLE ROW LEVEL SECURITY;
DROP POLICY IF EXISTS "insurance_plan_services_owner" ON public.insurance_plan_services;
CREATE POLICY "insurance_plan_services_owner"
ON public.insurance_plan_services
FOR ALL
USING (
EXISTS (
SELECT 1 FROM public.insurance_plans ip
WHERE ip.id = insurance_plan_services.insurance_plan_id
AND ip.owner_id = auth.uid()
)
)
WITH CHECK (
EXISTS (
SELECT 1 FROM public.insurance_plans ip
WHERE ip.id = insurance_plan_services.insurance_plan_id
AND ip.owner_id = auth.uid()
)
);
-- Passo 4: grants
GRANT ALL ON TABLE public.insurance_plan_services TO postgres;
GRANT ALL ON TABLE public.insurance_plan_services TO anon;
GRANT ALL ON TABLE public.insurance_plan_services TO authenticated;
GRANT ALL ON TABLE public.insurance_plan_services TO service_role;
-- Passo 5: trigger updated_at
DROP TRIGGER IF EXISTS set_insurance_plan_services_updated_at ON public.insurance_plan_services;
CREATE TRIGGER set_insurance_plan_services_updated_at
BEFORE UPDATE ON public.insurance_plan_services
FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
-- Passo 6: adicionar campo active na tabela services (se ainda não existir)
ALTER TABLE public.services
ADD COLUMN IF NOT EXISTS active boolean DEFAULT true NOT NULL;