Este projeto é uma API RESTful escrita em Kotlin usando o framework Spring Boot. A API simula um fórum e possui os seguintes modelos:
- Curso 📚
- Resposta 💬
- StatusTopico (enum) 📊
- Topico 📋
- Usuario 👤
O código está organizado nas seguintes camadas:
- Controller
- Service
- Repository
- Model
- DTO
- Config
- Security
- Exception
- Mapper
- Clone este repositório
- Abra o projeto em sua IDE de preferência
- Certifique-se de ter o Maven instalado e configurado em sua máquina
- Execute o comando
mvn clean install
para compilar o projeto e baixar as dependências necessárias - Execute o comando
mvn spring-boot:run
para iniciar a aplicação
O projeto utiliza as seguintes tecnologias:
- Spring Boot: framework Java para desenvolvimento de aplicações web
- Kotlin: linguagem de programação
- Jackson: biblioteca para serialização e desserialização JSON
- Flyway: gerenciador de versões do banco de dados
- MySQL: banco de dados relacional
- Spring Security: framework para segurança de aplicações web
- JWT: biblioteca para autenticação baseada em tokens
Para executar o projeto com Docker, execute os seguintes comandos:
docker build -t restapi -f Dockerfile .
docker run -p 8080:8080 restapi
Para executar os testes, execute o comando mvn test
Foi utilizado o banco de dados MySQL para armazenar os dados da API. O banco de dados é gerenciado pelo Flyway, que realiza a migração do banco de dados a cada nova versão do projeto.
É possivel utilizar o banco de dados MySQL localmente pelo Docker. Para isso, execute os seguintes comandos:
docker pull mysql:8.0.32
docker run -d -p 3306:3306 --name mysql-container -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=restapi mysql:8.0.32
Para utilizar o Cache do Redis, é necessário executar o Redis localmente pelo Docker. Para isso, execute os seguintes comandos:
docker pull redis:lastest
docker run -d -p 6379:6379 --name redis redis:lastest
A API possui autenticação baseada em tokens. Para acessar os endpoints protegidos, é necessário enviar o token de acesso no header da requisição. Para obter o token de acesso, é necessário enviar uma requisição POST
para o endpoint /login
com o seguinte corpo:
{
"username": "[email protected]",
"password": "123456"
}
A API possui os seguintes endpoints:
GET /swagger-ui/index.html
: Documentação da API pelo Swagger UIGET /login
: Retorna um token de acessoGET /topicos
: Retorna uma lista de tópicosGET /topicos?nomeCurso=...
: Retorna uma lista de tópicos filtrados por nome do cursoGET /relatorios
: Retorna um relatório de tópicosGET /topicos/{id}
: Retorna informações sobre um tópico específicoPOST /topicos
: Cria um novo tópicoPOST /respostas
: Cria uma nova resposta para um tópico específicoPUT /topicos/{id}
: Atualiza informações sobre um tópico específicoDELETE /topicos/{id}
: Exclui um tópico específico