Uma API RESTful robusta desenvolvida com Java e Spring Boot para gerenciar uma plataforma de Ensino a Distância (EAD). Permite que professores publiquem cursos e aulas, enquanto alunos podem se inscrever, assistir conteúdos e interagir com comentários.
Este projeto foi criado para consolidar conhecimentos em desenvolvimento Back-end com Java e Spring Boot, aplicando boas práticas e arquitetura em camadas.
- Cadastro/Login
- Criar Cursos
- Editar/Excluir Cursos
- Adicionar/Editar Aulas
- Cadastro/Login
- Listar Cursos Disponíveis
- Inscrever-se em Cursos
- Visualizar Aulas Inscritas
- Comentar nas Aulas
- Proteção de rotas com JWT
- Regras de autorização baseadas em perfis:
STUDENTeTEACHER
- Java 17+
- Spring Boot (Web, Data JPA, Security)
- PostgreSQL (ou H2 para testes locais)
- Lombok
- Swagger/OpenAPI
- JWT (JSON Web Token)
- Postman
- Maven
- Java 17+
- Maven
- PostgreSQL
git clone https://github.com/thalesbensi/CoursesManagementAPIspring.datasource.url=jdbc:postgresql://localhost:5432/ead
spring.datasource.username=seu_usuario
spring.datasource.password=sua_senha
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialectmvn spring-boot:runA aplicação estará disponível em: http://localhost:8080
POST /courses– Criar novo curso (PROFESSOR)GET /courses– Listar cursosPUT /courses/{id}– Atualizar curso (PROFESSOR)DELETE /courses/{id}– Deletar curso (PROFESSOR)
POST /lessons/{courseId}– Adicionar aula a um cursoGET /lessons/{courseId}– Listar aulas do cursoPUT /lessons/{id}– Atualizar aulaDELETE /lessons/{id}– Deletar aula
POST /comments/{lessonId}– Comentar em aula (ALUNO)GET /comments/{lessonId}– Listar comentários da aula
POST /enrollments/{courseId}– Inscrever-se em um cursoGET /enrollments/my– Ver cursos inscritos
POST /auth/register– Registrar usuário (ALUNO ou PROFESSOR)POST /auth/login– Autenticar e receber token JWT
{
"login": "usuario",
"password": "senha",
"role": "STUDENT" // ou "TEACHER"
}{
"login": "usuario",
"password": "senha"
}A documentação dos endpoints é gerada automaticamente com Swagger.
Acesse no navegador:
🔗 http://localhost:8080/swagger-ui.html
A API utiliza autenticação via JWT (JSON Web Token) para proteger rotas.
Inclua o token JWT no cabeçalho das requisições autenticadas, no seguinte formato:
Authorization: Bearer {seu_token_jwt}
A aplicação está pronta para ser executada com Docker utilizando Docker Compose, facilitando a configuração do ambiente completo com API e banco de dados PostgreSQL.
Crie um arquivo chamado .env na raiz do projeto com o seguinte conteúdo:
# Banco de Dados
POSTGRES_DB=coursesdb
POSTGRES_USER=seu_usuario
POSTGRES_PASSWORD=sua_senha
- 🔐 Substitua
seu_usuarioesua_senhapelos valores desejados. - O Docker Compose utilizará automaticamente essas variáveis ao subir os containers.
Com o .env configurado, execute:
docker-compose up --buildIsso irá:
-
Subir um container PostgreSQL com os dados definidos
-
Subir a API Spring Boot já conectada ao banco
A aplicação estará disponível em:
Swagger UI: http://localhost:8080/swagger-ui.html
Para encerrar e remover os containers:
docker-compose down- Setup rápido e padronizado com .env + docker-compose
- Sem necessidade de instalar PostgreSQL localmente