photum/backend/internal/db/queries/usuarios.sql
NANDO9322 90e1508409 fix: correções na criação de usuários admin e no formulário de aprovação
- Frontend: Refatoração do componente UserApproval para corrigir perda de foco nos inputs (extração de modais).
- Backend: Implementação da criação automática do perfil profissional (cadastro_profissionais) ao criar um novo usuário admin.
- Backend: Correção para evitar duplicidade de profissionais, utilizando o email para vincular ao perfil existente.
- API: Ajuste para retornar dados completos (nome, telefone, empresa) na listagem de usuários do admin.
2026-02-04 13:08:31 -03:00

73 lines
2.5 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,
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,
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,
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
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: ListAllUsuarios :many
SELECT u.id, u.email, u.role, u.tipo_profissional, u.ativo, u.criado_em, u.atualizado_em,
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 *;