Skip to content

Hackaton-ONE/hackathon-Backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sentiment Analysis API – Spring Boot

API REST desenvolvida em Spring Boot para análise de sentimentos de comentários de usuários. A aplicação consome um modelo externo de Machine Learning (Python), persiste dados em MySQL e utiliza JWT para segurança e autenticação.


📋 Índice


🚀 Tecnologias Utilizadas

  • Java 17 ou superior
  • Spring Boot 3.5.8
  • MySQL – Banco de dados relacional
  • Spring Security + JWT – Autenticação e Autorização
  • Maven – Gerenciador de dependências
  • Google Gemini – Integração para tradução via LangChain4j
  • Python – Modelo de análise de sentimentos (microsserviço externo)

📦 Dependências e Versões

Principais dependências do projeto:

Dependência Versão Finalidade
Spring Boot Starter Web 3.5.8 Criação da API REST
Spring Boot Starter Data JPA 3.5.8 Persistência de dados com JPA/Hibernate
Spring Boot Starter Validation 3.5.8 Validação de requisições
MySQL Driver Runtime Conexão com MySQL
JJWT (Json Web Token) 0.11.5 Geração e validação de tokens
LangChain4j 0.36.2 Integração com LLMs
LangChain4j Gemini 0.36.2 Tradução automática de textos
Lombok Redução de código boilerplate
Spring Boot DevTools 3.5.8 Ferramentas de desenvolvimento
Spring Boot Starter Test 3.5.8 Testes automatizados

📌 Consulte o arquivo pom.xml para a lista completa.


🗂️ Estrutura do Projeto

src/main/java/com/hackathon/sentiments/api
├── config
│   └── AppConfig.java                    # Configurações globais (Beans)
│
├── controller
│   ├── AutenticacaoController.java       # Endpoints de Login e Cadastro
│   └── SentimentController.java          # Endpoints de Análise de Sentimento
│
├── dto
│   ├── ComentarioRequest.java            # Entrada de dados (Texto)
│   ├── LoginRequest.java                 # Entrada de dados (Login)
│   ├── SentimentoResponse.java           # Resposta da API
│   └── ... (Outros DTOs de Estatísticas)
│
├── entity
│   ├── Comentario.java                   # Entidade JPA (Tabela Comentários)
│   └── Usuario.java                      # Entidade JPA (Tabela Usuários)
│
├── exception
│   ├── SenhaIncorretaException.java      # Tratamento de erro de senha
│   ├── UsuarioJaExistenteException.java  # Tratamento de conflito de usuário
│   └── UsuarioNaoEncontradoException.java
│
├── repository
│   ├── ComentarioRepository.java         # Interface JPA (Acesso a dados)
│   └── UsuarioRepository.java            # Interface JPA (Acesso a dados)
│
├── security
│   ├── FiltroJwt.java                    # Filtro para validar tokens
│   ├── JwtUtilitario.java                # Geração e leitura de JWT
│   └── SecurityConfig.java               # Configuração do Spring Security
│
├── service
│   ├── ComentarioService.java            # Lógica de negócio de comentários
│   ├── SentimentPythonClient.java        # Cliente HTTP para o microserviço Python
│   ├── TraducaoService.java              # Integração com API Gemini
│   └── UsuarioService.java               # Lógica de negócio de usuários
│
└── SentimentAnalysisApplication.java     # Classe principal (Boot)

🏗️ Organização em Camadas

  • config: Configurações globais da aplicação e injeção de dependências.
  • controller: Responsável por expor os endpoints REST e receber as requisições.
  • dto: Objetos de Transferência de Dados para isolar a camada de domínio.
  • entity: Classes que representam as tabelas do banco de dados (ORM).
  • exception: Classes para tratamento personalizado de erros e exceções de negócio.
  • repository: Interfaces de acesso aos dados (Spring Data JPA).
  • security: Lógica de autenticação, filtros de token JWT e configuração de segurança.
  • service: Regras de negócio e orquestração de serviços externos (Python e Gemini).

⚙️ Configuração do Ambiente

Pré-requisitos

  • Java 17 ou superior
  • Maven 3.6+
  • MySQL 8+ instalado e em execução
  • Modelo Python de análise de sentimentos rodando

Banco de Dados

Configure a conexão com MySQL no arquivo:

src/main/resources/application.properties

Exemplo de configuração:

# Configuração do MySQL
spring.datasource.url=jdbc:mysql://localhost:3306/sentiments_db?createDatabaseIfNotExist=true&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=sua_senha

# Configuração do Driver e Dialeto
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect

# Configuração do JPA/Hibernate
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

💡 Dica: O parâmetro createDatabaseIfNotExist=true tenta criar o banco automaticamente se ele não existir.


▶️ Como Executar

Antes de iniciar, certifique-se de que o MySQL está rodando e que você configurou as credenciais no arquivo src/main/resources/application.properties.

Opção 1: Via IntelliJ IDEA (Recomendado)

  1. Abra a pasta do projeto no IntelliJ IDEA.
  2. Aguarde o Maven baixar todas as dependências e indexar o projeto.
  3. Navegue até src/main/java/com/hackathon/sentiments/api.
  4. Clique com o botão direito na classe SentimentAnalysisApplication.java e selecione Run.
  5. A aplicação estará disponível em http://localhost:8080.

Opção 2: Via Linha de Comando (Maven)

Ideal se você já tem o Maven instalado e configurado no terminal.

# 1. Clone o repositório
git clone <url-do-repositorio>
cd sentiment-analysis-api

# 2. Execute o projeto via plugin do Spring Boot
mvn spring-boot:run

Opção 3: Executar o JAR

# 1. Limpe a build anterior e empacote o projeto
mvn clean package

# 2. Navegue até a pasta target e execute o arquivo .jar gerado
java -jar target/sentiment-analysis-api-0.0.1-SNAPSHOT.jar

🔐 Autenticação e Segurança

A maioria dos endpoints é protegida. Você precisa se autenticar para obter um Token JWT.

1️⃣ Registrar Usuário (Público)

POST /auth/registrar

{
  "usuario": "admin@email.com",
  "senha": "123"
}

2️⃣ Login (Público)

POST /auth/login

{
  "usuario": "admin@email.com",
  "senha": "123"
}

Resposta:

{
  "token": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1p..."
}

⚠️ Importante: Copie o token da resposta. Para acessar os endpoints abaixo, você deve enviá-lo no Header da requisição: Authorization: Bearer eyJhbGciOiJIUzI1Ni...


📡 Endpoints Disponíveis

Endereço Base: http://localhost:8080

🔒 Nota: Todos os endpoints abaixo (exceto /auth) exigem o Header: Authorization: Bearer <seu_token_jwt>

🔹 Análise de Sentimento

Analisa o sentimento de um comentário em português.

Endpoint: POST /sentiment

Requisição:

{
  "texto": "Este produto é excelente, superou minhas expectativas!"
}

Resposta:

{
  "previsao": "Positivo",
  "probabilidade": 0.9245
}

🔹 Análise com Tradução Automática

Traduz comentários em outros idiomas para português usando Google Gemini antes de analisar o sentimento.

Endpoint: POST /sentiment/tradutor

Requisição:

{
  "texto": "This product is very good and I recommend it"
}

Resposta:

{
  "textoTraduzido": "Este produto é muito bom e eu o recomendo",
  "previsao": "Positivo",
  "probabilidade": 0.9572
}

🔹 Histórico do Usuário

Retorna os dados do usuário logado e a lista de comentários que ele já enviou.

Endpoint: GET /auth/minhaconta

Resposta:

{
  "id": 1,
  "email": "usuario@teste.com",
  "comentarios": [
    {
      "id": 10,
      "texto": "Gostei muito!",
      "sentimento": "Positivo"
    }
  ]
}

🔹 Palavras Mais Utilizadas

Retorna as 10 palavras mais frequentes encontradas nos comentários analisados.

Endpoint: GET /sentiment/palavras-mais-usadas

Resposta:

[
  {
    "palavra": "bom",
    "quantidade": 45
  },
  {
    "palavra": "produto",
    "quantidade": 38
  },
  {
    "palavra": "excelente",
    "quantidade": 25
  }
]

🔹 Estatísticas de Sentimentos

Fornece o total de comentários analisados separados por sentimento.

Endpoint: GET /sentiment/estatisticas

Resposta:

{
  "positivos": 120,
  "negativos": 45
}

🧪 Testes da API

A API pode ser testada utilizando as seguintes ferramentas:

  • Postman
  • Insomnia
  • cURL – Testes via linha de comando

Exemplo com cURL (com Autenticação):

# 1. Primeiro faça login para pegar o token
# (Copie o token da resposta)

# 2. Depois faça a requisição usando o token
curl -X POST http://localhost:8080/sentiment \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SEU_TOKEN_AQUI" \
  -d '{"texto": "Produto de péssima qualidade"}'

📝 Observações Finais

  • ⚠️ A API depende do correto funcionamento do serviço Python de análise de sentimentos
  • 🗄️ O MySQL deve estar ativo antes de iniciar a aplicação
  • 📄 Todas as requisições e respostas utilizam o formato JSON
  • 🔐 Configure adequadamente as credenciais do banco e chaves de API no application.properties

Desenvolvido com ☕ e 💻

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors