328 lines
13 KiB
PL/PgSQL
328 lines
13 KiB
PL/PgSQL
-- =============================================================================
|
|
-- SEED — Usuários fictícios para teste
|
|
-- =============================================================================
|
|
-- IMPORTANTE: Execute APÓS a migration_001.sql
|
|
-- IMPORTANTE: Requer extensão pgcrypto (já ativa no Supabase)
|
|
--
|
|
-- Cria os seguintes usuários de teste:
|
|
--
|
|
-- paciente@agenciapsi.com.br senha: Teste@123 → paciente
|
|
-- terapeuta@agenciapsi.com.br senha: Teste@123 → terapeuta solo
|
|
-- clinica1@agenciapsi.com.br senha: Teste@123 → clínica coworking
|
|
-- clinica2@agenciapsi.com.br senha: Teste@123 → clínica com secretaria
|
|
-- clinica3@agenciapsi.com.br senha: Teste@123 → clínica full
|
|
-- saas@agenciapsi.com.br senha: Teste@123 → admin da plataforma
|
|
--
|
|
-- =============================================================================
|
|
|
|
BEGIN;
|
|
|
|
-- Limpa seeds anteriores se existirem
|
|
DELETE FROM auth.users
|
|
WHERE email IN (
|
|
'paciente@agenciapsi.com.br',
|
|
'terapeuta@agenciapsi.com.br',
|
|
'clinica1@agenciapsi.com.br',
|
|
'clinica2@agenciapsi.com.br',
|
|
'clinica3@agenciapsi.com.br',
|
|
'saas@agenciapsi.com.br'
|
|
);
|
|
|
|
-- ============================================================
|
|
-- 1. Cria usuários no auth.users
|
|
-- NOTA: confirmed_at é coluna gerada — removida do INSERT
|
|
-- ============================================================
|
|
|
|
INSERT INTO auth.users (
|
|
instance_id,
|
|
id,
|
|
email,
|
|
encrypted_password,
|
|
email_confirmed_at,
|
|
created_at,
|
|
updated_at,
|
|
raw_user_meta_data,
|
|
raw_app_meta_data,
|
|
role,
|
|
aud,
|
|
is_sso_user,
|
|
is_anonymous,
|
|
confirmation_token,
|
|
recovery_token,
|
|
email_change_token_new,
|
|
email_change_token_current,
|
|
email_change
|
|
)
|
|
VALUES
|
|
-- Paciente
|
|
(
|
|
'00000000-0000-0000-0000-000000000000',
|
|
'aaaaaaaa-0001-0001-0001-000000000001',
|
|
'paciente@agenciapsi.com.br',
|
|
crypt('Teste@123', gen_salt('bf')),
|
|
now(), now(), now(),
|
|
'{"name": "Ana Paciente"}'::jsonb,
|
|
'{"provider": "email", "providers": ["email"]}'::jsonb,
|
|
'authenticated', 'authenticated', false, false, '', '', '', '', ''
|
|
),
|
|
-- Terapeuta
|
|
(
|
|
'00000000-0000-0000-0000-000000000000',
|
|
'aaaaaaaa-0002-0002-0002-000000000002',
|
|
'terapeuta@agenciapsi.com.br',
|
|
crypt('Teste@123', gen_salt('bf')),
|
|
now(), now(), now(),
|
|
'{"name": "Bruno Terapeuta"}'::jsonb,
|
|
'{"provider": "email", "providers": ["email"]}'::jsonb,
|
|
'authenticated', 'authenticated', false, false, '', '', '', '', ''
|
|
),
|
|
-- Clínica 1 — Coworking
|
|
(
|
|
'00000000-0000-0000-0000-000000000000',
|
|
'aaaaaaaa-0003-0003-0003-000000000003',
|
|
'clinica1@agenciapsi.com.br',
|
|
crypt('Teste@123', gen_salt('bf')),
|
|
now(), now(), now(),
|
|
'{"name": "Clínica Espaço Psi"}'::jsonb,
|
|
'{"provider": "email", "providers": ["email"]}'::jsonb,
|
|
'authenticated', 'authenticated', false, false, '', '', '', '', ''
|
|
),
|
|
-- Clínica 2 — Recepção
|
|
(
|
|
'00000000-0000-0000-0000-000000000000',
|
|
'aaaaaaaa-0004-0004-0004-000000000004',
|
|
'clinica2@agenciapsi.com.br',
|
|
crypt('Teste@123', gen_salt('bf')),
|
|
now(), now(), now(),
|
|
'{"name": "Clínica Mente sã"}'::jsonb,
|
|
'{"provider": "email", "providers": ["email"]}'::jsonb,
|
|
'authenticated', 'authenticated', false, false, '', '', '', '', ''
|
|
),
|
|
-- Clínica 3 — Full
|
|
(
|
|
'00000000-0000-0000-0000-000000000000',
|
|
'aaaaaaaa-0005-0005-0005-000000000005',
|
|
'clinica3@agenciapsi.com.br',
|
|
crypt('Teste@123', gen_salt('bf')),
|
|
now(), now(), now(),
|
|
'{"name": "Clínica Bem Estar"}'::jsonb,
|
|
'{"provider": "email", "providers": ["email"]}'::jsonb,
|
|
'authenticated', 'authenticated', false, false, '', '', '', '', ''
|
|
),
|
|
-- SaaS Admin
|
|
(
|
|
'00000000-0000-0000-0000-000000000000',
|
|
'aaaaaaaa-0006-0006-0006-000000000006',
|
|
'saas@agenciapsi.com.br',
|
|
crypt('Teste@123', gen_salt('bf')),
|
|
now(), now(), now(),
|
|
'{"name": "Admin Plataforma"}'::jsonb,
|
|
'{"provider": "email", "providers": ["email"]}'::jsonb,
|
|
'authenticated', 'authenticated', false, false, '', '', '', '', ''
|
|
);
|
|
|
|
-- auth.identities (obrigatório para GoTrue reconhecer login email/senha)
|
|
INSERT INTO auth.identities (id, user_id, provider_id, provider, identity_data, created_at, updated_at, last_sign_in_at)
|
|
VALUES
|
|
(gen_random_uuid(), 'aaaaaaaa-0001-0001-0001-000000000001', 'paciente@agenciapsi.com.br', 'email', '{"sub": "aaaaaaaa-0001-0001-0001-000000000001", "email": "paciente@agenciapsi.com.br", "email_verified": true}'::jsonb, now(), now(), now()),
|
|
(gen_random_uuid(), 'aaaaaaaa-0002-0002-0002-000000000002', 'terapeuta@agenciapsi.com.br', 'email', '{"sub": "aaaaaaaa-0002-0002-0002-000000000002", "email": "terapeuta@agenciapsi.com.br", "email_verified": true}'::jsonb, now(), now(), now()),
|
|
(gen_random_uuid(), 'aaaaaaaa-0003-0003-0003-000000000003', 'clinica1@agenciapsi.com.br', 'email', '{"sub": "aaaaaaaa-0003-0003-0003-000000000003", "email": "clinica1@agenciapsi.com.br", "email_verified": true}'::jsonb, now(), now(), now()),
|
|
(gen_random_uuid(), 'aaaaaaaa-0004-0004-0004-000000000004', 'clinica2@agenciapsi.com.br', 'email', '{"sub": "aaaaaaaa-0004-0004-0004-000000000004", "email": "clinica2@agenciapsi.com.br", "email_verified": true}'::jsonb, now(), now(), now()),
|
|
(gen_random_uuid(), 'aaaaaaaa-0005-0005-0005-000000000005', 'clinica3@agenciapsi.com.br', 'email', '{"sub": "aaaaaaaa-0005-0005-0005-000000000005", "email": "clinica3@agenciapsi.com.br", "email_verified": true}'::jsonb, now(), now(), now()),
|
|
(gen_random_uuid(), 'aaaaaaaa-0006-0006-0006-000000000006', 'saas@agenciapsi.com.br', 'email', '{"sub": "aaaaaaaa-0006-0006-0006-000000000006", "email": "saas@agenciapsi.com.br", "email_verified": true}'::jsonb, now(), now(), now())
|
|
ON CONFLICT (provider, provider_id) DO NOTHING;
|
|
|
|
|
|
-- ============================================================
|
|
-- 2. Profiles
|
|
-- ============================================================
|
|
|
|
INSERT INTO public.profiles (id, role, account_type, full_name)
|
|
VALUES
|
|
('aaaaaaaa-0001-0001-0001-000000000001', 'portal_user', 'patient', 'Ana Paciente'),
|
|
('aaaaaaaa-0002-0002-0002-000000000002', 'tenant_member', 'therapist', 'Bruno Terapeuta'),
|
|
('aaaaaaaa-0003-0003-0003-000000000003', 'tenant_member', 'clinic', 'Clínica Espaço Psi'),
|
|
('aaaaaaaa-0004-0004-0004-000000000004', 'tenant_member', 'clinic', 'Clínica Mente sã'),
|
|
('aaaaaaaa-0005-0005-0005-000000000005', 'tenant_member', 'clinic', 'Clínica Bem Estar'),
|
|
('aaaaaaaa-0006-0006-0006-000000000006', 'saas_admin', 'free', 'Admin Plataforma')
|
|
ON CONFLICT (id) DO UPDATE SET
|
|
role = EXCLUDED.role,
|
|
account_type = EXCLUDED.account_type,
|
|
full_name = EXCLUDED.full_name;
|
|
|
|
|
|
-- ============================================================
|
|
-- 3. SaaS Admin na tabela saas_admins
|
|
-- ============================================================
|
|
|
|
INSERT INTO public.saas_admins (user_id, created_at)
|
|
VALUES ('aaaaaaaa-0006-0006-0006-000000000006', now())
|
|
ON CONFLICT (user_id) DO NOTHING;
|
|
|
|
|
|
-- ============================================================
|
|
-- 4. Tenant do terapeuta
|
|
-- ============================================================
|
|
|
|
INSERT INTO public.tenants (id, name, kind, created_at)
|
|
VALUES ('bbbbbbbb-0002-0002-0002-000000000002', 'Bruno Terapeuta', 'therapist', now())
|
|
ON CONFLICT (id) DO NOTHING;
|
|
|
|
INSERT INTO public.tenant_members (tenant_id, user_id, role, status, created_at)
|
|
VALUES ('bbbbbbbb-0002-0002-0002-000000000002', 'aaaaaaaa-0002-0002-0002-000000000002', 'tenant_admin', 'active', now())
|
|
ON CONFLICT (tenant_id, user_id) DO NOTHING;
|
|
|
|
DO $$ BEGIN PERFORM public.seed_determined_commitments('bbbbbbbb-0002-0002-0002-000000000002'); END $$;
|
|
|
|
|
|
-- ============================================================
|
|
-- 5. Tenant da Clínica 1 — Coworking
|
|
-- ============================================================
|
|
|
|
INSERT INTO public.tenants (id, name, kind, created_at)
|
|
VALUES ('bbbbbbbb-0003-0003-0003-000000000003', 'Clínica Espaço Psi', 'clinic_coworking', now())
|
|
ON CONFLICT (id) DO NOTHING;
|
|
|
|
INSERT INTO public.tenant_members (tenant_id, user_id, role, status, created_at)
|
|
VALUES ('bbbbbbbb-0003-0003-0003-000000000003', 'aaaaaaaa-0003-0003-0003-000000000003', 'tenant_admin', 'active', now())
|
|
ON CONFLICT (tenant_id, user_id) DO NOTHING;
|
|
|
|
DO $$ BEGIN PERFORM public.seed_determined_commitments('bbbbbbbb-0003-0003-0003-000000000003'); END $$;
|
|
|
|
|
|
-- ============================================================
|
|
-- 6. Tenant da Clínica 2 — Recepção
|
|
-- ============================================================
|
|
|
|
INSERT INTO public.tenants (id, name, kind, created_at)
|
|
VALUES ('bbbbbbbb-0004-0004-0004-000000000004', 'Clínica Mente sã', 'clinic_reception', now())
|
|
ON CONFLICT (id) DO NOTHING;
|
|
|
|
INSERT INTO public.tenant_members (tenant_id, user_id, role, status, created_at)
|
|
VALUES ('bbbbbbbb-0004-0004-0004-000000000004', 'aaaaaaaa-0004-0004-0004-000000000004', 'tenant_admin', 'active', now())
|
|
ON CONFLICT (tenant_id, user_id) DO NOTHING;
|
|
|
|
DO $$ BEGIN PERFORM public.seed_determined_commitments('bbbbbbbb-0004-0004-0004-000000000004'); END $$;
|
|
|
|
|
|
-- ============================================================
|
|
-- 7. Tenant da Clínica 3 — Full
|
|
-- ============================================================
|
|
|
|
INSERT INTO public.tenants (id, name, kind, created_at)
|
|
VALUES ('bbbbbbbb-0005-0005-0005-000000000005', 'Clínica Bem Estar', 'clinic_full', now())
|
|
ON CONFLICT (id) DO NOTHING;
|
|
|
|
INSERT INTO public.tenant_members (tenant_id, user_id, role, status, created_at)
|
|
VALUES ('bbbbbbbb-0005-0005-0005-000000000005', 'aaaaaaaa-0005-0005-0005-000000000005', 'tenant_admin', 'active', now())
|
|
ON CONFLICT (tenant_id, user_id) DO NOTHING;
|
|
|
|
DO $$ BEGIN PERFORM public.seed_determined_commitments('bbbbbbbb-0005-0005-0005-000000000005'); END $$;
|
|
|
|
|
|
-- ============================================================
|
|
-- 8. Subscriptions ativas para cada conta
|
|
-- ============================================================
|
|
|
|
-- Terapeuta → plano 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 '30 days',
|
|
'seed', now(), now()
|
|
FROM public.plans p WHERE p.key = 'therapist_free';
|
|
|
|
-- Clínica 1 → plano 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 '30 days',
|
|
'seed', now(), now()
|
|
FROM public.plans p WHERE p.key = 'clinic_free';
|
|
|
|
-- Clínica 2 → plano 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 '30 days',
|
|
'seed', now(), now()
|
|
FROM public.plans p WHERE p.key = 'clinic_free';
|
|
|
|
-- Clínica 3 → plano 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 '30 days',
|
|
'seed', now(), now()
|
|
FROM public.plans p WHERE p.key = 'clinic_free';
|
|
|
|
-- Paciente → plano 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 '30 days',
|
|
'seed', now(), now()
|
|
FROM public.plans p WHERE p.key = 'patient_free';
|
|
|
|
|
|
-- ============================================================
|
|
-- 9. Vincula terapeuta à Clínica 3 (full) como exemplo
|
|
-- ============================================================
|
|
|
|
INSERT INTO public.tenant_members (tenant_id, user_id, role, status, created_at)
|
|
VALUES (
|
|
'bbbbbbbb-0005-0005-0005-000000000005',
|
|
'aaaaaaaa-0002-0002-0002-000000000002',
|
|
'therapist',
|
|
'active',
|
|
now()
|
|
)
|
|
ON CONFLICT (tenant_id, user_id) DO NOTHING;
|
|
|
|
|
|
-- ============================================================
|
|
-- 10. Confirma
|
|
-- ============================================================
|
|
|
|
DO $$
|
|
BEGIN
|
|
RAISE NOTICE '✅ Seed aplicado com sucesso.';
|
|
RAISE NOTICE '';
|
|
RAISE NOTICE ' Usuários criados:';
|
|
RAISE NOTICE ' paciente@agenciapsi.com.br → patient';
|
|
RAISE NOTICE ' terapeuta@agenciapsi.com.br → therapist (tenant próprio + vinculado à Clínica 3)';
|
|
RAISE NOTICE ' clinica1@agenciapsi.com.br → clinic_coworking';
|
|
RAISE NOTICE ' clinica2@agenciapsi.com.br → clinic_reception';
|
|
RAISE NOTICE ' clinica3@agenciapsi.com.br → clinic_full';
|
|
RAISE NOTICE ' saas@agenciapsi.com.br → saas_admin';
|
|
RAISE NOTICE ' Senha de todos: Teste@123';
|
|
END;
|
|
$$;
|
|
|
|
COMMIT;
|