Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

17 Commits

Folders and files

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

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages