Este projeto foi criado como um exercício prático e estudos focados em backend, utilizando Java, Spring Boot e PostgreSQL. O principal objetivo foi aprofundar meus conhecimentos técnicos, experimentar boas práticas e aplicar conceitos como autenticação, segurança, upload de vídeos e testes automatizados. Embora se trate de uma aplicação funcional para gestão de cursos online, seu propósito central foi o aprendizado e aprimoramento profissional.
- Java 17: Linguagem principal do projeto.
- Spring Boot: Framework para desenvolvimento de aplicações Java.
- Spring Data JPA: ORM para interação com o banco de dados PostgreSQL.
- Spring Security: Implementação de autenticação e autorização com JWT e refresh tokens.
- PostgreSQL: Banco de dados relacional.
- Lombok: Redução de boilerplate.
- Bean Validation: Validação de entrada de dados.
- Gumlet API: Serviço para upload de vídeos.
- OkHttp: Cliente HTTP usado para consumo da API da Gumlet.
- JUnit & Mockito: Frameworks para testes unitários e mocks.
- Swagger UI: Documentação interativa.
- Postman: Testes manuais dos endpoints durante o desenvolvimento.
- Autenticação e Autorização: Implementação de login com JWT, incluindo refresh tokens armazenados no banco de dados.
- Controle de Acesso por Papéis: Diferenciação de permissões entre
Student,TeachereAdmin. - Upload de Vídeos: Integração com a API da Gumlet para upload e gerenciamento de vídeos.
- Gerenciamento de Dados: Criação de DTOs e Responses para estruturação de dados.
- Testes Automatizados: Cobertura de testes na camada de serviço utilizando JUnit e Mockito.
- Gerenciamento de Exclusões em Cascata: Implementação de lógica personalizada para exclusão de cursos, aulas e matrículas.
src
└── main
├── java
│ ├── app.config # Configurações gerais
│ ├── app.controllers # Endpoints REST (AuthController, CourseController, etc.)
│ ├── app.domain # Entidades JPA (Course, User, etc.)
│ ├── app.domain.dto # DTOs para requisição e resposta
│ ├── app.domain.enums # Enums (ex: RoleType)
│ ├── app.domain.lifecycle # Eventos de ciclo de vida JPA (ex: CascadeDeletionManager)
│ ├── app.exceptions # Tratamento de erros personalizados
│ ├── app.mappers # Conversão DTO ↔ Entity
│ ├── app.repositories # Interfaces do Spring Data JPA
│ ├── app.security # JWT, filtros de autenticação e autorização
│ ├── app.services # Regras de negócio
│ └── app.streaming # Integração com API da Gumlet (HTTP client via OkHttp)
└── test
└── java
└── app.services # Testes unitários com JUnit e Mockito
- Clone o repositório:
git clone https://github.com/Gsn00/Plataforma-de-Cursos.git
- Navegue até o diretório do projeto:
cd Plataforma-de-Cursos
Para que o upload de vídeos funcione corretamente, é necessário configurar uma API Key do Gumlet na aplicação.
- Acesse o site oficial do Gumlet.
- Clique em Sign Up para criar uma nova conta ou Login se já tiver uma conta.
- Após o login, no painel do Gumlet, vá para User > API Keys.
- Clique em + Generate API Key.
- Preencha o nome e as permissões desejadas para a chave.
- Clique em Create API Key.
- Copie a chave gerada.
-
No seu projeto local, abra o arquivo
src/main/resources/application.properties. -
Adicione a seguinte linha, substituindo
SEU-GUMLET-API-KEYpela chave copiada:gumlet.api.key=SEU-GUMLET-API-KEYCom isso, a aplicação estará pronta para interagir com a API do Gumlet para upload de vídeos.
O projeto já inclui documentação interativa gerada com Swagger UI, que facilita os testes dos endpoints diretamente pelo navegador.
- Inicie a aplicação:
./mvnw spring-boot:run
- Acesse a URL do Swagger no navegador:
http://localhost:8080/swagger-ui/index.html - Navegue pelas rotas disponíveis e faça testes de requisições (GET, POST, PUT, DELETE).
- Para rotas protegidas, use o botão Authorize para inserir o token JWT após realizar o login.
Ao iniciar a aplicação, três usuários são criados automaticamente no banco de dados para facilitar o teste das funcionalidades:
| Nome | Senha | Papel (Role) | |
|---|---|---|---|
| John Doe | john@gmail.com | john123 | STUDENT |
| Daryl Gray | daryl@gmail.com | daryl123 | TEACHER |
| Ana Brown | ana@gmail.com | ana123 | ADMIN |
Você pode fazer login com esses dados para gerar um token JWT e testar as permissões específicas de cada papel.