Detalhes das alterações: [Banco de Dados] - Ajuste nas constraints UNIQUE das tabelas de catálogo (cursos, empresas, tipos_eventos, etc.) para incluir a coluna `regiao`, permitindo dados duplicados entre regiões mas únicos por região. - Correção crítica na constraint da tabela `precos_tipos_eventos` para evitar conflitos de UPSERT (ON CONFLICT) durante a inicialização. - Implementação de lógica de Seed para a região 'MG': - Clonagem automática de catálogos base de 'SP' para 'MG' (Tipos de Evento, Serviços, etc.). - Inserção de tabela de preços específica para 'MG' via script de migração. [Backend - Go] - Atualização geral dos Handlers e Services para filtrar dados baseados no cabeçalho `x-regiao`. - Ajuste no Middleware de autenticação para processar e repassar o contexto da região. - Correção de queries SQL (geradas pelo sqlc) para suportar os novos filtros regionais. [Frontend - React] - Implementação do envio global do cabeçalho `x-regiao` nas requisições da API. - Correção no componente [PriceTableEditor](cci:1://file:///c:/Projetos/photum/frontend/components/System/PriceTableEditor.tsx:26:0-217:2) para carregar e salvar preços respeitando a região selecionada (fix de "Preços zerados" em MG). - Refatoração profunda na tela de Importação ([ImportData.tsx](cci:7://file:///c:/Projetos/photum/frontend/pages/ImportData.tsx:0:0-0:0)): - Adição de feedback visual detalhado para registros ignorados. - Categorização explícita de erros: "CPF Inválido", "Região Incompatível", "Linha Vazia/Separador". - Correção na lógica de contagem para considerar linhas vazias explicitamente no relatório final, garantindo que o total bata com o Excel. [Geral] - Correção de diversos erros de lint e tipagem TSX. - Padronização de logs de erro no backend para facilitar debug.
85 lines
2.9 KiB
SQL
85 lines
2.9 KiB
SQL
-- name: CreateUsuario :one
|
|
INSERT INTO usuarios (email, senha_hash, role, tipo_profissional, ativo)
|
|
VALUES ($1, $2, $3, $4, false)
|
|
RETURNING *;
|
|
|
|
-- name: GetUsuarioByEmail :one
|
|
SELECT u.id, u.email, u.senha_hash, u.role, u.tipo_profissional, u.ativo, u.criado_em, u.atualizado_em, u.regioes_permitidas,
|
|
COALESCE(cp.nome, cc.nome, '') as nome,
|
|
COALESCE(cp.whatsapp, cc.telefone, '') as whatsapp,
|
|
e.id as empresa_id,
|
|
e.nome as empresa_nome
|
|
FROM usuarios u
|
|
LEFT JOIN cadastro_profissionais cp ON u.id = cp.usuario_id
|
|
LEFT JOIN cadastro_clientes cc ON u.id = cc.usuario_id
|
|
LEFT JOIN empresas e ON cc.empresa_id = e.id
|
|
WHERE u.email = $1 LIMIT 1;
|
|
|
|
-- name: GetUsuarioByID :one
|
|
SELECT u.id, u.email, u.senha_hash, u.role, u.tipo_profissional, u.ativo, u.criado_em, u.atualizado_em, u.regioes_permitidas,
|
|
COALESCE(cp.nome, cc.nome, '') as nome,
|
|
COALESCE(cp.whatsapp, cc.telefone, '') as whatsapp,
|
|
e.id as empresa_id,
|
|
e.nome as empresa_nome
|
|
FROM usuarios u
|
|
LEFT JOIN cadastro_profissionais cp ON u.id = cp.usuario_id
|
|
LEFT JOIN cadastro_clientes cc ON u.id = cc.usuario_id
|
|
LEFT JOIN empresas e ON cc.empresa_id = e.id
|
|
WHERE u.id = $1 LIMIT 1;
|
|
|
|
-- name: DeleteUsuario :exec
|
|
DELETE FROM usuarios
|
|
WHERE id = $1;
|
|
|
|
-- name: ListUsuariosPending :many
|
|
SELECT u.id, u.email, u.role, u.tipo_profissional, u.ativo, u.criado_em, u.regioes_permitidas,
|
|
COALESCE(cp.nome, cc.nome, '') as nome,
|
|
COALESCE(cp.whatsapp, cc.telefone, '') as whatsapp,
|
|
e.id as empresa_id,
|
|
e.nome as empresa_nome
|
|
FROM usuarios u
|
|
LEFT JOIN cadastro_profissionais cp ON u.id = cp.usuario_id
|
|
LEFT JOIN cadastro_clientes cc ON u.id = cc.usuario_id
|
|
LEFT JOIN empresas e ON cc.empresa_id = e.id
|
|
WHERE u.ativo = false
|
|
AND $1::text = ANY(u.regioes_permitidas)
|
|
ORDER BY u.criado_em DESC;
|
|
|
|
-- name: UpdateUsuarioAtivo :one
|
|
UPDATE usuarios
|
|
SET ativo = $2, atualizado_em = NOW()
|
|
WHERE id = $1
|
|
RETURNING *;
|
|
|
|
-- name: UpdateUsuarioRole :one
|
|
UPDATE usuarios
|
|
SET role = $2, atualizado_em = NOW()
|
|
WHERE id = $1
|
|
RETURNING *;
|
|
|
|
-- name: UpdateUsuarioRegions :exec
|
|
UPDATE usuarios
|
|
SET regioes_permitidas = $2, atualizado_em = NOW()
|
|
WHERE id = $1;
|
|
|
|
-- name: UpdateUsuarioSenha :exec
|
|
UPDATE usuarios
|
|
SET senha_hash = $2, atualizado_em = NOW()
|
|
WHERE id = $1;
|
|
|
|
-- name: ListAllUsuarios :many
|
|
SELECT u.id, u.email, u.role, u.tipo_profissional, u.ativo, u.criado_em, u.atualizado_em, u.regioes_permitidas,
|
|
COALESCE(cp.nome, cc.nome, '') as nome,
|
|
COALESCE(cp.whatsapp, cc.telefone, '') as whatsapp,
|
|
e.id as empresa_id,
|
|
e.nome as empresa_nome
|
|
FROM usuarios u
|
|
LEFT JOIN cadastro_profissionais cp ON u.id = cp.usuario_id
|
|
LEFT JOIN cadastro_clientes cc ON u.id = cc.usuario_id
|
|
LEFT JOIN empresas e ON cc.empresa_id = e.id
|
|
ORDER BY u.criado_em DESC;
|
|
|
|
-- name: CreateCadastroCliente :one
|
|
INSERT INTO cadastro_clientes (usuario_id, empresa_id, nome, telefone)
|
|
VALUES ($1, $2, $3, $4)
|
|
RETURNING *;
|