Projeto desenvolvido durante o módulo 1 do curso FullStack do Floripa Mais Tec 2024
Uma API REST utilizando Java e Spring para a gestão de cursos, turmas, alunos e docentes de uma instituição de ensino.
O projeto constitui uma aplicação de gestão para uma instituição de ensino.
Foi criado com o Java Spring Web e Spring Security, com integração a um banco de dados PostgreSQL.
O projeto constitui as seguintes entidades:
- Usuário
- Aluno
- Docente
- Curso
- Turma
- Matéria
- Nota
O projeto requer o JDK versão 17 ou maior, e utiliza o Maven para gerenciamento de dependências.
As dependências estão descritas no arquivo pom.xml na raiz do projeto.
As deoendências utilizadas são:
- Spring Web
- Spring Security
- Spring Data JPA
- PostgreSQL Driver
- java-jwt (para geração de tokens JWT)
- Lombok
- JUnit (para testes)
- H2 Database (para testes)
Faça o download do projeto da maneira que preferir.
git clone https://github.com/micheldrv/fmt-m1
O projeto utiliza um banco de dados PostgreSQL.
É recomendado utilizar o Docker para criar o banco.
docker run --name fmt-m1 -e POSTGRES_DB=postgres -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=12345678 -p 5432:5432 -d postgres
As credenciais e porta do banco de dados precisam ser configuradas no arquivo application.properties dentro da pasta src/main/resources/ do projeto.
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=12345678
O projeto utiliza duas chaves RSA, uma pública e uma privada. Elas se encontram nos arquivos app.key e app.pub na pasta src/main/resources.
Também é recomendado configurar o nome do emissor de tokens JWT no arquivo application.properties, também na pasta resources
jwt.issuer = com.darochavieira.fmt-m1
Vem configurado como padrão um usuário administrador com as seguintes credenciais:
- Login: admin
- Senha: 12345678
O arquivo data.sql na pasta src/main/resources cria automaticamente os papéis padrões do projeto, e o usuário administrador padrão.
Para alterar as credenciais padrões é necessário editar este arquivo, inserindo as credenciais novas.
A senha do usuário administador no arquivo data.sql precisa ser criptografada com a função BCrypt. Pode-se utilizar uma ferramenta online para criptografar a senha.
Não é recomendado alterar os papéis padrões.
As credenciais do usuário administrador também são utilizadas nos testes do projeto, e precisam ser alteradas no arquivo BaseControllerTests, no método getTokenAdmin, na pasta src/test/java/com/darochavieira/fmtm1/base.
É recomendado utilizar o IntelliJ IDEA para executar o projeto.
É necessário executar o arquivo FmtM1Application.java na pasta src/main/java/com/darochavieira/fmtm1 do projeto.
Certifique-se que o banco de dados está em execução e apropriadamente configurado.
Também é possível executar a aplicação através da linha de comando com o Maven instalado.
Executar o seguinte comando na raiz da aplicação:
mvn spring-boot:run
Certifique-se que o banco de dados está em execução e apropriadamente configurado.
Primeiramente é necessário efetuar o login no endpoint /login para receber o token JWT necessário para autenticação.
{
"login": "admin",
"senha": "12345678"
}
Somente o administrador pode cadastrar usuários, docentes e alunos.
Para o cadastro de um docente ou aluno, primeiro é necessário cadastrar o usuário no endpoint /cadastro, o papel do usuário é necessário para cadastro.
{
"login": "user",
"senha": "1234",
"papel": "PROFESSOR"
}
{
"login": "aluno",
"senha": "1234",
"papel": "ALUNO"
}
Os possíveis papeis são:
- ADM
- PEDAGOGICO
- RECRUITER
- PROFESSOR
- ALUNO
Depois é necessário cadastar a entidade docente, ou aluno, nos endpoints respectivos /docentes ou /alunos:
{
"nome": "Professor",
"dataEntrada": "2024-01-01",
"idUsuario": 2
}
Nota-se que para cadastro de aluno é necessário uma turma cadastrada.
{
"nome": "Aluno",
"dataNascimento": "2000-01-01",
"idUsuario": 3,
"idTurma": 1
}
Os endpoints disponíveis na aplicação são:
- POST /login
- POST /cadastro
- GET /usuarios/{id}
- DELETE /usuários/{id}
Cadastro:
{
"login": "user",
"senha": "1234",
"papel": "PROFESSOR"
}
- GET /docentes
- GET /docentes/{id}
- POST /docentes
- PUT /docentes/{id}
- DELETE /docentes/{id}
Cadastro:
{
"nome": "Professor",
"dataEntrada": "2024-01-01",
"idUsuario": 2
}
- GET /cursos/{id}
- GET /cursos/{id}/materias
- POST /cursos
- PUT /cursos/{id}
- DELETE /cursos/{id}
Cadastro:
{
"nome": "Curso"
}
- GET /turmas
- GET /turmas/{id}
- POST /turmas
- PUT /turmas/{id}
- DELETE /turmas/{id}
Cadastro:
{
"nome": "Turma",
"idProfessor": 1,
"idCurso": 1
}
- GET /materias/{id}
- POST /materias
- PUT /materias/{id}
- DELETE /materias/{id}
Cadastro:
{
"nome": "Matéria",
"idCurso": 1
}
- GET /alunos
- GET /alunos/{id}
- GET /alunos/{id}/notas
- GET /alunos/{id}/pontuacao
- POST /alunos
- PUT /alunos/{id}
- DELETE /alunos/{id}
Cadastro:
{
"nome": "Aluno",
"dataNascimento": "2000-01-01",
"idUsuario": 3,
"idTurma": 1
}
- GET /notas/{id}
- POST /notas
- PUT /notas/{id}
- DELETE /notas/{id}
Cadastro:
{
"idAluno": 1,
"idProfessor": 1,
"idMateria": 1,
"valor": 10.0,
"data": "2024-04-01"
}
A aplicação segue as seguintes regras de permissões para os usuários cadastrados:
- ADM: Pode acessar tudo.
- Pedagogico: pode acessar turma, curso, professor, aluno. Não pode deletar dados.
- Recruiter: pode acessar tudo sobre professor. Não pode deletar dados.
- Professor: pode acessar tudo sobre notas. Não pode deletar dados.
- Aluno: apenas acessa suas próprias notas e pontuação total pessoa. Não pode deletar dados.
- Somente ADM pode fazer cadastros
- Somente ADM pode deletar entidades.