| Home | Escopo | Processo | Mockups | Configuração | Arquitetura | Gerência | BD | Qualidade | Frontend | Backend | 
|---|
Organização do Backend
Uma boa organização do backend é essencial para garantir escalabilidade, manutenção e clareza no código. Um padrão amplamente utilizado é a separação em Model, Controller e Service, cada um com responsabilidades bem definidas. Essa abordagem permite que o código seja modular e facilite a colaboração em equipe.
- Model: Responsável por representar os dados e gerenciar a interação com o banco de dados.
 - Controller: Gerencia as requisições e define o fluxo entre as camadas.
 - Service: Contém a lógica de negócios, separando regras e processos das demais camadas.
 
Abaixo, detalhamos cada uma dessas camadas.
Models
Os modelos representam as entidades do sistema e são usados para armazenar dados essenciais, como informações de administradores, feedbacks, postagens e pontos de interesse.
Admin
O modelo Admin representa os administradores do sistema, responsáveis por realizar autenticação e gerenciar operações administrativas.
Atributos
- name (String): Nome do administrador.
 - username (String): Nome de usuário usado para login.
 - password (String): Senha para autenticação.
 
Feedback
O modelo Feedback representa o feedback dado a um post no sistema, permitindo indicar curtidas e comentários.
Atributos
- hasLiked (boolean): Indica se o post foi curtido.
 - comment (String): Comentário deixado como feedback.
 
PointOfInterest
O modelo PointOfInterest representa um Ponto de Interesse no sistema, contendo informações sobre a localização e descrição do ponto.
Atributos
- id (String): Identificador único do Ponto de Interesse.
 - titulo (String): Título ou nome do Ponto de Interesse.
 - descricao (String): Descrição detalhada do Ponto de Interesse.
 - latitude (String): Latitude da localização do Ponto de Interesse.
 - longitude (String): Longitude da localização do Ponto de Interesse.
 
Post
O modelo Post representa uma postagem no sistema, contendo informações sobre o conteúdo, categorias, feedbacks e pontos de interesse associados.
Atributos
- title (String): Título da postagem.
 - category (List): Lista de categorias associadas à postagem.
 - description (String): Descrição detalhada da postagem.
 - image (String, opcional): URL de uma imagem associada à postagem.
 - feedbacks (List): Lista de feedbacks dados à postagem.
 - pointOfInterest (PointOfInterest, opcional): Ponto de interesse associado à postagem.
 - id (String): Identificador único da postagem.
 
Services
AuthService
O AuthService é responsável por autenticar administradores. Ele implementa o UserDetailsService para carregar as informações do administrador e permitir a autenticação.
- 
Método: 
loadUserByUsername(String username)
Carrega um administrador a partir do banco de dados pelo nome de usuário fornecido. Retorna um objetoUserDetailspara a autenticação. 
PointOfInterestService
O PointOfInterestService gerencia a criação de pontos de interesse no sistema. Ele interage com o banco de dados para armazenar informações relacionadas aos pontos de interesse.
- 
Método: 
createPointOfInterest(PointOfInterest pointOfInterest)
Cria e insere um ponto de interesse no banco de dados, incluindo informações como título, descrição, latitude e longitude. 
PostService
O PostService é responsável por gerenciar postagens. Ele permite a criação, recuperação, atualização e exclusão de postagens, além de permitir adicionar feedbacks e associar pontos de interesse.
- 
Método:
getPostsByCategory(String category)
Retorna uma lista de postagens ativas, filtradas pela categoria fornecida. - 
Método:
getAllPosts()
Retorna todas as postagens ativas. - 
Método:
createPost(Post post)
Cria e insere uma nova postagem no banco de dados, com a possibilidade de associar um ponto de interesse. - 
Método:
addFeedbackToPost(String postId, Feedback feedback)
Adiciona um feedback a uma postagem específica. - 
Método:
deletePostById(String id)
Marca uma postagem como inativa (deletada). - 
Método:
updatePost(String postId, Post updatedPost)
Atualiza os dados de uma postagem existente no banco de dados. - 
Método:
getPostById(String postId)
Retorna uma postagem específica com base no ID fornecido. 
Controllers
Os controllers do backend do Colabora Aí são responsáveis por gerenciar as interações entre o cliente e os serviços do sistema, expondo endpoints REST para realizar diversas operações.
PostController
O PostController gerencia as operações relacionadas a posts. As funcionalidades incluem:
- Buscar posts por categoria: Retorna todos os posts ou filtra por uma categoria específica.
 - Criar um novo post: Adiciona um post ao sistema.
 - Excluir um post por ID: Marca um post como deletado.
 - Atualizar um post por ID: Modifica as informações de um post existente.
 - Buscar um post por ID: Recupera os detalhes de um post específico.
 
PointOfInterestController
O PointOfInterestController lida com a criação de Pontos de Interesse (Points of Interest - POI).
Funcionalidade principal:
- Criar um novo Ponto de Interesse: Adiciona um POI ao sistema com base nos dados fornecidos.
 
FeedbackController
O FeedbackController permite adicionar feedbacks aos posts. Funcionalidade principal:
- Adicionar Feedback a um Post: Associa um feedback ao post especificado pelo ID.
 
AuthController
O AuthController gerencia a autenticação de administradores no sistema. Funcionalidade principal:
- Autenticar um Administrador: Verifica as credenciais do administrador e retorna um token JWT para autenticação, caso as credenciais sejam válidas.