photum/backend/internal/db/queries/usuarios.sql
NANDO9322 9c6ee3afdb feat: habilita edição de perfil para clientes e corrige carga de dados
Backend:
- Adiciona endpoint `PUT /api/me` para permitir atualização de dados do usuário logado.
- Implementa query `UpdateCadastroCliente` e função de serviço [UpdateClientData]para persistir alterações de clientes.
- Atualiza handlers [Me], [Login] e [ListPending] para incluir e mapear corretamente campos de cliente (CPF, Endereço, Telefone).
- Corrige mapeamento do campo `phone` na struct de resposta do usuário.

Frontend:
- Habilita o formulário de edição em [Profile.tsx] para usuários do tipo 'CLIENTE' (Event Owner).
- Adiciona função [updateUserProfile] em [apiService.ts] para consumir o novo endpoint.
- Atualiza [AuthContext] para persistir campos do cliente (CPF, Endereço, etc.) durante a restauração de sessão ([restoreSession], corrigindo o bug de perfil vazio ao recarregar a página.
- Padroniza envio de dados no Registro e Aprovação para usar `snake_case` (ex: `cpf_cnpj`, `professional_type`).
- Atualiza tipos em [types.ts] para incluir campos de endereço e documentos.
2026-02-09 00:56:09 -03:00

120 lines
3.6 KiB
SQL

-- name: CreateUsuario :one
INSERT INTO usuarios (email, senha_hash, role, tipo_profissional, ativo)
VALUES ($1, $2, $3, $4, $5)
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
WHERE $1::text = ANY(u.regioes_permitidas)
ORDER BY u.criado_em DESC;
-- name: CreateCadastroCliente :one
INSERT INTO cadastro_clientes (
usuario_id,
empresa_id,
nome,
telefone,
cpf_cnpj,
cep,
endereco,
numero,
complemento,
bairro,
cidade,
estado
)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12)
RETURNING *;
-- name: UpdateCadastroCliente :one
UPDATE cadastro_clientes
SET
nome = COALESCE($2, nome),
telefone = COALESCE($3, telefone),
cpf_cnpj = COALESCE($4, cpf_cnpj),
cep = COALESCE($5, cep),
endereco = COALESCE($6, endereco),
numero = COALESCE($7, numero),
complemento = COALESCE($8, complemento),
bairro = COALESCE($9, bairro),
cidade = COALESCE($10, cidade),
estado = COALESCE($11, estado),
atualizado_em = NOW()
WHERE usuario_id = $1
RETURNING *;
-- name: GetCadastroClienteByUsuarioID :one
SELECT * FROM cadastro_clientes
WHERE usuario_id = $1 LIMIT 1;