Files
agenciapsilmno/database-novo/seeds/seed_013_subscriptions.sql

185 lines
6.7 KiB
PL/PgSQL

-- =============================================================================
-- SEED 013 — Subscriptions + Determined Commitments
-- =============================================================================
-- Execute APÓS: seed_010 (plans), seed_011 (features), seed_012 (plan_features)
-- E APÓS: seed_001, seed_002, seed_003 (usuários e tenants)
--
-- Cria subscriptions para todos os usuários de teste e chama
-- seed_determined_commitments() para tenants que ainda não têm.
--
-- Mapeamento:
-- paciente@ (user_id) → patient_free
-- terapeuta@ (user_id) → therapist_free
-- clinica1@ (tenant_id) → clinic_free (coworking)
-- clinica2@ (tenant_id) → clinic_free (recepção)
-- clinica3@ (tenant_id) → clinic_free (full)
-- supervisor@ (user_id) → supervisor_free
-- editor@ (user_id) → therapist_free (acesso via platform_roles)
-- therapist2@ (user_id) → therapist_free
-- therapist3@ (user_id) → therapist_free
-- secretary@ → sem plano próprio (usa plano da Clínica 2)
-- saas@ → saas_admin (sem plano)
-- =============================================================================
BEGIN;
-- Limpa subscriptions de seed anteriores
DELETE FROM public.subscriptions WHERE source = 'seed';
-- ============================================================
-- 1. Subscriptions — user_id scope (therapist, patient, supervisor)
-- ============================================================
-- Paciente → patient_free
INSERT INTO public.subscriptions (
user_id, plan_id, plan_key, status, "interval",
current_period_start, current_period_end,
source, started_at, activated_at
)
SELECT
'aaaaaaaa-0001-0001-0001-000000000001',
p.id, p.key, 'active', 'month',
now(), now() + interval '1 year',
'seed', now(), now()
FROM public.plans p WHERE p.key = 'patient_free';
-- Terapeuta → therapist_free
INSERT INTO public.subscriptions (
user_id, plan_id, plan_key, status, "interval",
current_period_start, current_period_end,
source, started_at, activated_at
)
SELECT
'aaaaaaaa-0002-0002-0002-000000000002',
p.id, p.key, 'active', 'month',
now(), now() + interval '1 year',
'seed', now(), now()
FROM public.plans p WHERE p.key = 'therapist_free';
-- Supervisor → supervisor_free
INSERT INTO public.subscriptions (
user_id, plan_id, plan_key, status, "interval",
current_period_start, current_period_end,
source, started_at, activated_at
)
SELECT
'aaaaaaaa-0007-0007-0007-000000000007',
p.id, p.key, 'active', 'month',
now(), now() + interval '1 year',
'seed', now(), now()
FROM public.plans p WHERE p.key = 'supervisor_free';
-- Editor → therapist_free (acesso editor vem de platform_roles)
INSERT INTO public.subscriptions (
user_id, plan_id, plan_key, status, "interval",
current_period_start, current_period_end,
source, started_at, activated_at
)
SELECT
'aaaaaaaa-0008-0008-0008-000000000008',
p.id, p.key, 'active', 'month',
now(), now() + interval '1 year',
'seed', now(), now()
FROM public.plans p WHERE p.key = 'therapist_free';
-- Terapeuta 2 → therapist_free
INSERT INTO public.subscriptions (
user_id, plan_id, plan_key, status, "interval",
current_period_start, current_period_end,
source, started_at, activated_at
)
SELECT
'aaaaaaaa-0009-0009-0009-000000000009',
p.id, p.key, 'active', 'month',
now(), now() + interval '1 year',
'seed', now(), now()
FROM public.plans p WHERE p.key = 'therapist_free';
-- Terapeuta 3 → therapist_free
INSERT INTO public.subscriptions (
user_id, plan_id, plan_key, status, "interval",
current_period_start, current_period_end,
source, started_at, activated_at
)
SELECT
'aaaaaaaa-0010-0010-0010-000000000010',
p.id, p.key, 'active', 'month',
now(), now() + interval '1 year',
'seed', now(), now()
FROM public.plans p WHERE p.key = 'therapist_free';
-- ============================================================
-- 2. Subscriptions — tenant_id scope (clinic)
-- ============================================================
-- Clínica 1 (Espaço Psi / Coworking) → clinic_free
INSERT INTO public.subscriptions (
tenant_id, plan_id, plan_key, status, "interval",
current_period_start, current_period_end,
source, started_at, activated_at
)
SELECT
'bbbbbbbb-0003-0003-0003-000000000003',
p.id, p.key, 'active', 'month',
now(), now() + interval '1 year',
'seed', now(), now()
FROM public.plans p WHERE p.key = 'clinic_free';
-- Clínica 2 (Mente sã / Recepção) → clinic_free
INSERT INTO public.subscriptions (
tenant_id, plan_id, plan_key, status, "interval",
current_period_start, current_period_end,
source, started_at, activated_at
)
SELECT
'bbbbbbbb-0004-0004-0004-000000000004',
p.id, p.key, 'active', 'month',
now(), now() + interval '1 year',
'seed', now(), now()
FROM public.plans p WHERE p.key = 'clinic_free';
-- Clínica 3 (Bem Estar / Full) → clinic_free
INSERT INTO public.subscriptions (
tenant_id, plan_id, plan_key, status, "interval",
current_period_start, current_period_end,
source, started_at, activated_at
)
SELECT
'bbbbbbbb-0005-0005-0005-000000000005',
p.id, p.key, 'active', 'month',
now(), now() + interval '1 year',
'seed', now(), now()
FROM public.plans p WHERE p.key = 'clinic_free';
-- ============================================================
-- 3. Determined Commitments (idempotente por design da função)
-- ============================================================
-- Chama para todos os tenants. A função usa ON CONFLICT internamente.
DO $$ BEGIN PERFORM public.seed_determined_commitments('bbbbbbbb-0002-0002-0002-000000000002'); END $$; -- Terapeuta
DO $$ BEGIN PERFORM public.seed_determined_commitments('bbbbbbbb-0003-0003-0003-000000000003'); END $$; -- Clínica 1
DO $$ BEGIN PERFORM public.seed_determined_commitments('bbbbbbbb-0004-0004-0004-000000000004'); END $$; -- Clínica 2
DO $$ BEGIN PERFORM public.seed_determined_commitments('bbbbbbbb-0005-0005-0005-000000000005'); END $$; -- Clínica 3
DO $$ BEGIN PERFORM public.seed_determined_commitments('bbbbbbbb-0009-0009-0009-000000000009'); END $$; -- Terapeuta 2
DO $$ BEGIN PERFORM public.seed_determined_commitments('bbbbbbbb-0010-0010-0010-000000000010'); END $$; -- Terapeuta 3
-- ============================================================
-- 4. Confirma
-- ============================================================
DO $$
DECLARE
v_count integer;
BEGIN
SELECT count(*) INTO v_count FROM public.subscriptions WHERE source = 'seed';
RAISE NOTICE 'seed_013_subscriptions: % subscriptions ativas criadas.', v_count;
SELECT count(*) INTO v_count FROM public.determined_commitments WHERE is_native = true;
RAISE NOTICE 'seed_013_subscriptions: % determined_commitments nativos existentes.', v_count;
END;
$$;
COMMIT;