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)