You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
API REST para gerenciamento de solicitações de atendimento com fluxo multi-step (3 etapas), autenticação JWT, controle de acesso baseado em roles (CLIENT, ANALYST, ADMIN), integração com ViaCEP, auditoria com AOP e busca avançada com Elasticsearch.
Criar/editar suas solicitações, salvar rascunho, enviar para análise
ANALYST
Analista
Listar/analisar solicitações das UFs que cobre, decidir (Aprovar/Rejeitar)
ADMIN
Administrador
Gerenciar tudo, criar usuários (ANALYST/ADMIN), configurar cobertura de analistas
🚀 Como Executar
Pré-requisitos
Java 21+
Docker e Docker Compose (recomendado)
Maven 3.9+
Opção 1: Com Docker (Recomendado)
# Clone o repositório
git clone https://github.com/eduardomarra/solicitacao-api.git
cd solicitacao-api
# Subir todos os serviços
docker-compose up -d
# Aguardar a inicialização
docker-compose logs -f app
Opção 3: Localmente (com PostgreSQL e Elasticsearch via Docker)
# Subir apenas os serviços necessários
docker-compose up -d postgres elasticsearch
# Executar a aplicação
mvn spring-boot:run -Dspring.profiles.active=dev
📡 Endpoints Principais
🔐 Autenticação
Método
Endpoint
Descrição
Role
POST
/auth/register
Registrar novo usuário (CLIENT)
Público
POST
/auth/login
Login e obtenção de token
Público
POST
/admin/users
Criar usuário (ANALYST/ADMIN)
ADMIN
📝 Solicitações (CLIENT)
Método
Endpoint
Descrição
POST
/solicitations
Criar nova solicitação (rascunho)
PUT
/solicitations/{id}/step1
Salvar Step 1 - Dados básicos
PUT
/solicitations/{id}/step2
Salvar Step 2 - Endereço (com ViaCEP)
PUT
/solicitations/{id}/step3
Salvar Step 3 - Confirmação
POST
/solicitations/{id}/submit
Enviar solicitação para análise
GET
/solicitations/{id}
Buscar solicitação
📊 Análise (ANALYST)
Método
Endpoint
Descrição
GET
/analyst/solicitations
Listar solicitações das UFs cobertas
GET
/analyst/solicitations/{id}
Buscar solicitação
POST
/analyst/solicitations/{id}/start
Iniciar análise
POST
/analyst/solicitations/{id}/decide
Decidir (APPROVE/REJECT)
GET
/analyst/solicitations/search
Busca avançada com Elasticsearch
🛡️ Administração (ADMIN)
Método
Endpoint
Descrição
GET
/admin/solicitations
Listar todas as solicitações
GET
/admin/solicitations/{id}
Buscar solicitação por ID
PUT
/admin/analysts/{userId}/coverage
Configurar cobertura do analista
GET
/admin/analysts/{userId}/coverage
Buscar cobertura do analista
Parâmetros de busca
Parâmetro
Tipo
Descrição
text
String
Busca em title e description
statuses
List
Filtro por status (SUBMITTED, IN_REVIEW, APPROVED, REJECTED)
states
List
Filtro por UF (SP, RJ, MG, etc.)
serviceType
String
Filtro por tipo de serviço
priority
String
Filtro por prioridade (LOW, MEDIUM, HIGH)
dateFrom
Date
Data inicial
dateTo
Date
Data final
page
Integer
Número da página (0-indexed)
size
Integer
Tamanho da página
sort
String
Ordenação (ex: createdAt,desc)
🐳 Docker Compose
# Subir todos os serviços
docker-compose up -d
# Ver logs
docker-compose logs -f app
# Parar todos os serviços
docker-compose down
# Parar e remover volumes
docker-compose down -v
# Reconstruir e subir
docker-compose up -d --build
Serviços
Serviço
Porta
Descrição
Aplicação
8080
Spring Boot API
PostgreSQL
5432
Banco de dados
Elasticsearch
9200
Busca e indexação
📚 Documentação da API
Swagger UI
text
http://localhost:8080/api/swagger-ui/index.html
OpenAPI JSON
text
http://localhost:8080/api/v3/api-docs
H2 Console (Desenvolvimento)
text
http://localhost:8080/api/h2-console
JDBC URL: jdbc:h2:mem:solicitacao_db
User: sa
Password: (deixe em branco)
🧪 Testes
Executar todos os testes
mvn test
Executar testes específicos
mvn test -Dtest=AuthIntegrationTest
📊 Auditoria
O sistema utiliza AOP (Aspect Oriented Programming) para auditoria das ações críticas.