-- 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;