omnichannel-deploy/database/seeds/001_demo_access.sql
Rafael Lopes c5ebbd50b5 REFACTOR: Estrutura de migrations com rastreamento e separação de seeds
- Introduz schema_migrations para controle de migrations já aplicadas:
  apenas arquivos novos rodam a cada deploy, eliminando re-execuções

- Renumera migrations de 001 a 026 sem lacunas (gaps em 013 e 024 fechados)

- Adiciona 008_mensagens.sql: CREATE TABLE que estava ausente do repositório

- Corrige idempotência de 015_configurable_triage_flow:
  adiciona UNIQUE (flow_id, label) e (audience_id, label) e targets
  explícitos no ON CONFLICT que antes duplicava dados a cada deploy

- Separa dados de demonstração em database/seeds/ (só roda em dev/uat)

- Remove seeds e migrations sem propósito:
  seeds/002 e 027 tornados obsoletos com a remoção dos opening templates

- Atualiza deploy-dev.yml: loop com checagem de tracking + passo de seeds
2026-07-24 15:22:26 -03:00

63 lines
2.2 KiB
SQL

-- ============================================================
-- Migration 003: Usuarios de demonstracao e acessos iniciais
-- Perfis: Admin, Supervisor e Agente
-- Areas: Suporte, Financeiro e Comercial
-- ============================================================
INSERT INTO usuarios (nome, email, ativo) VALUES
('Admin Demo', 'admin@sothis.com.br', TRUE),
('Supervisor Demo', 'supervisor@sothis.com.br', TRUE),
('Atendente Demo', 'atendente@sothis.com.br', TRUE)
ON CONFLICT (email) DO UPDATE SET
nome = EXCLUDED.nome,
ativo = TRUE,
updated_at = NOW();
INSERT INTO usuarios_provedores (usuario_id, provedor, provedor_user_id)
SELECT u.id, provider.provedor, provider.provedor_user_id
FROM usuarios u
JOIN (
VALUES
('admin@sothis.com.br', 'ldap', 'admin'),
('admin@sothis.com.br', 'microsoft', 'admin@sothis.com.br'),
('supervisor@sothis.com.br', 'ldap', 'supervisor'),
('supervisor@sothis.com.br', 'microsoft', 'supervisor@sothis.com.br'),
('atendente@sothis.com.br', 'ldap', 'atendente'),
('atendente@sothis.com.br', 'microsoft', 'atendente@sothis.com.br')
) AS provider(email, provedor, provedor_user_id) ON provider.email = u.email
ON CONFLICT (provedor, provedor_user_id)
DO UPDATE SET usuario_id = EXCLUDED.usuario_id;
INSERT INTO usuarios_perfis (usuario_id, perfil_id)
SELECT u.id, p.id
FROM usuarios u
JOIN (
VALUES
('admin@sothis.com.br', 'Admin'),
('supervisor@sothis.com.br', 'Supervisor'),
('atendente@sothis.com.br', 'Agente')
) AS access(email, perfil) ON access.email = u.email
JOIN perfis_acesso p ON p.nome = access.perfil
ON CONFLICT (usuario_id, perfil_id) DO NOTHING;
INSERT INTO usuarios_areas (usuario_id, area_id, funcao, principal, ativo)
SELECT u.id, a.id, access.funcao, TRUE, TRUE
FROM usuarios u
JOIN (
VALUES
('admin@sothis.com.br', 'Suporte', 'Administrador'),
('supervisor@sothis.com.br', 'Suporte', 'Supervisor'),
('atendente@sothis.com.br', 'Suporte', 'Atendente')
) AS access(email, area, funcao) ON access.email = u.email
JOIN areas a ON a.nome = access.area
ON CONFLICT (usuario_id, area_id)
DO UPDATE SET
funcao = EXCLUDED.funcao,
principal = TRUE,
ativo = TRUE,
updated_at = NOW();