-- ============================================================================= -- Freemium F1 — limite de pacientes do plano therapist_free -- -- clinic_free já traz max_patients=30 (em plan_features.limits da feature -- clinic_calendar, semeado). O therapist_free não tinha limite de pacientes. -- Pendura max_patients=20 na feature 'patients.manage' (a que o therapist_free -- já possui, enabled). -- -- REGRA DE OURO: referenciar plano/feature POR KEY via subquery, nunca por uuid -- hardcoded (uuids divergem entre ambientes). Idempotente (merge no jsonb). -- O enforcement em runtime (trigger) está em manual/freemium_f1_plan_limits. -- ============================================================================= BEGIN; UPDATE public.plan_features pf SET limits = COALESCE(pf.limits, '{}'::jsonb) || jsonb_build_object('max_patients', 20) WHERE pf.plan_id = (SELECT id FROM public.plans WHERE key = 'therapist_free') AND pf.feature_id = (SELECT id FROM public.features WHERE key = 'patients.manage'); -- Sanidade: garante que o limite ficou gravado (1 linha afetada esperada). DO $$ DECLARE v int; BEGIN SELECT (pf.limits->>'max_patients')::int INTO v FROM public.plan_features pf WHERE pf.plan_id = (SELECT id FROM public.plans WHERE key = 'therapist_free') AND pf.feature_id = (SELECT id FROM public.features WHERE key = 'patients.manage'); IF v IS DISTINCT FROM 20 THEN RAISE EXCEPTION 'therapist_free max_patients esperado 20, obtido %', v; END IF; END $$; COMMIT;