Controllers - Mapa da Acessibilidade¶
Visão Geral¶
Os controllers do projeto "Mapa da Acessibilidade" são responsáveis por gerenciar as operações de CRUD (Create, Read, Update, Delete) e a lógica de negócio da aplicação. Todos os controllers utilizam Prisma Client para interação com o banco de dados e seguem padrões consistentes de tratamento de erros.
AcessibilidadeController¶
Descrição¶
Controller responsável pelo gerenciamento de tipos de acessibilidade no sistema.
Funcionalidades¶
createAcessibilidade
¶
- Descrição: Cria uma nova acessibilidade no sistema
- Método HTTP: POST
- Parâmetros:
nome
(string, obrigatório): Nome da acessibilidadedescricao
(string, opcional): Descrição da acessibilidade- Validações:
- Nome é obrigatório e deve ser uma string
- Nome não pode ser vazio ou apenas espaços
- Nome deve ter no máximo 50 caracteres
- Verificação de duplicidade (case-insensitive)
- Respostas:
201
: Acessibilidade criada com sucesso400
: Erro de validação409
: Já existe uma acessibilidade com este nome500
: Erro interno do servidor
acessibilidadeErrorHandler
¶
- Descrição: Middleware para tratamento de erros específicos do controller
- Tratamento de Erros:
P2002
: Conflito de dados únicosPrismaClientValidationError
: Dados inválidos- Erros gerais do sistema
AcessibilidadeLocalController¶
Descrição¶
Controller responsável pela associação entre locais e tipos de acessibilidade.
Funcionalidades¶
createAcessibilidadeLocal
¶
- Descrição: Associa uma acessibilidade a um local específico
- Método HTTP: POST
- Parâmetros:
fk_local_id
(string, obrigatório): ID do localfk_acessibilidade_id
(string, obrigatório): ID da acessibilidadeobservacao
(string, opcional): Observações sobre a acessibilidade no local- Validações:
- Verificação se o local existe
- Verificação se a acessibilidade existe
- Verificação se a associação já existe
- Respostas:
201
: Associação criada com sucesso400
: Erro de validação404
: Local ou acessibilidade não encontrada409
: Associação já existe500
: Erro interno do servidor
AvaliacaoLocalController¶
Descrição¶
Controller responsável pelo gerenciamento de avaliações de locais.
Funcionalidades¶
createAvaliacaoLocal
¶
- Descrição: Cria uma nova avaliação para um local
- Método HTTP: POST
- Parâmetros:
fk_local_id
(string, obrigatório): ID do local avaliadofk_usuario_id
(string, obrigatório): ID do usuário que avalianota
(number, obrigatório): Nota da avaliaçãocomentario
(string, opcional): Comentário sobre a avaliação- Validações:
- Verificação se o local existe
- Verificação se o usuário existe
- Validação da nota (deve ser numérica)
- Verificação se o usuário já avaliou o local
- Respostas:
201
: Avaliação criada com sucesso400
: Erro de validação404
: Local ou usuário não encontrado409
: Usuário já avaliou este local500
: Erro interno do servidor
FotosController¶
Descrição¶
Controller responsável pelo gerenciamento de fotos associadas aos locais.
Funcionalidades¶
createFotos
¶
- Descrição: Cria múltiplas fotos em lote
- Método HTTP: POST
- Parâmetros: Array de objetos com:
url
(string, obrigatório): URL da fotostatus
(string, obrigatório): Status da fotofk_usuario_id
(string, obrigatório): ID do usuáriofk_local_id
(string, obrigatório): ID do local- Validações:
- Verificação se o corpo da requisição é um array não vazio
- Validação individual de cada foto
- Processamento em lote com relatório de sucessos/falhas
- Respostas:
201
: Fotos criadas com sucesso (com possíveis warnings)400
: Erro de validação ou nenhuma foto válida500
: Erro interno do servidor
buscarFotos
¶
- Descrição: Busca fotos com filtros opcionais
- Método HTTP: GET
- Parâmetros de Query:
url
(string, opcional): Filtro por URLstatus
(string, opcional): Filtro por statusfk_usuario_id
(string, opcional): Filtro por usuáriofk_local_id
(string, opcional): Filtro por local- Respostas:
200
: Lista de fotos encontradas500
: Erro interno do servidor
LocalController¶
Descrição¶
Controller responsável pelo gerenciamento de locais no sistema.
Funcionalidades¶
buscarLocais
¶
- Descrição: Busca locais com filtros opcionais
- Método HTTP: GET
- Parâmetros de Query:
nome
(string, opcional): Filtro por nome (case-insensitive)cidade
(string, opcional): Filtro por cidadetipo
(string, opcional): Filtro por tiporaio
(number, opcional): Raio de busca em kmlatitude
(number, opcional): Latitude para busca por proximidadelongitude
(number, opcional): Longitude para busca por proximidade- Funcionalidades Especiais:
- Busca por proximidade quando coordenadas são fornecidas
- Cálculo de distância entre coordenadas
- Ordenação por distância
- Respostas:
200
: Lista de locais encontrados500
: Erro interno do servidor
createLocal
¶
- Descrição: Cria um novo local
- Método HTTP: POST
- Parâmetros:
nome
(string, obrigatório): Nome do localdescricao
(string, opcional): Descrição do localtipo
(string, obrigatório): Tipo do localendereco
(string, opcional): Endereço do localcidade
(string, obrigatório): Cidade do localbairro
(string, opcional): Bairro do localestado
(string, opcional): Estado do locallatitude
(number, obrigatório): Latitude do locallongitude
(number, obrigatório): Longitude do localcriado_por
(string, obrigatório): ID do usuário criador- Funcionalidades:
- Geração automática de ID único
- Status automático como "aprovado"
- Respostas:
201
: Local criado com sucesso500
: Erro interno do servidor
Implementação com Padrão Repository¶
O LocalController também inclui uma implementação alternativa usando o padrão Repository:
LocalController
(Class)¶
- Construtor: Recebe repository e gerador de UUID como dependências
- Métodos: Mesmas funcionalidades da implementação funcional
- Vantagens: Melhor testabilidade e separação de responsabilidades
UsuariosController¶
Descrição¶
Controller responsável pelo gerenciamento de usuários e autenticação.
Funcionalidades¶
cadastrarUsuario
¶
- Descrição: Cadastra um novo usuário no sistema
- Método HTTP: POST
- Parâmetros:
nome
(string, obrigatório): Nome do usuárioemail
(string, obrigatório): Email do usuáriosenha
(string, obrigatório): Senha do usuáriopapel
(string, obrigatório): Papel/função do usuário- Segurança:
- Hash SHA-256 da senha
- Verificação de email único
- Respostas:
201
: Usuário cadastrado com sucesso400
: Campos obrigatórios ou email já cadastrado500
: Erro interno do servidor
loginUsuario
¶
- Descrição: Realiza login do usuário
- Método HTTP: POST
- Parâmetros:
email
(string, obrigatório): Email do usuáriosenha
(string, obrigatório): Senha do usuário- Segurança:
- Verificação de hash SHA-256
- Remoção da senha do retorno
- Respostas:
200
: Login realizado com sucesso400
: Email e senha obrigatórios401
: Credenciais inválidas500
: Erro interno do servidor
listarUsuarios
¶
- Descrição: Lista todos os usuários cadastrados
- Método HTTP: GET
- Funcionalidades:
- Retorna apenas dados seguros (sem senha)
- Inclui timestamps de criação e atualização
- Respostas:
200
: Lista de usuários500
: Erro interno do servidor
Padrões de Implementação¶
Tratamento de Erros¶
- Todos os controllers implementam try-catch
- Logs de erro detalhados para debug
- Respostas padronizadas para o cliente
- Desconexão adequada do Prisma Client
Validações¶
- Validação de campos obrigatórios
- Sanitização de dados (trim)
- Verificação de tipos de dados
- Validação de regras de negócio
Segurança¶
- Hash de senhas com SHA-256
- Verificação de duplicidade
- Sanitização de entrada
- Tratamento de erros sem exposição de dados sensíveis
Testabilidade¶
- Todos os controllers possuem testes unitários
- Mocks do Prisma Client
- Cobertura de cenários de sucesso e erro
- Testes de validação e regras de negócio
Tecnologias Utilizadas¶
- Prisma Client: ORM para interação com banco de dados
- UUID: Geração de identificadores únicos
- Crypto: Hash de senhas
- Jest: Framework de testes
- Express: Framework web (implícito nas assinaturas dos métodos)