Skip to content

micheldrv/fmt-m1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Projeto PCP FMT

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.

Descrição

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

Como utilizar o projeto

Dependências

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)

Clonar o projeto

Faça o download do projeto da maneira que preferir.

git clone https://github.com/micheldrv/fmt-m1

Configurar o projeto

Banco de dados

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

Chaves de criptografia

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

Credenciais de administrador

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.

Executando o projeto

É recomendado utilizar o IntelliJ IDEA para executar o projeto.

IntelliJ

É 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.

Maven

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.

Utilizando o projeto

Login

Primeiramente é necessário efetuar o login no endpoint /login para receber o token JWT necessário para autenticação.

{
	"login": "admin",
	"senha": "12345678"
}

Cadastro

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
}

Endpoints

Os endpoints disponíveis na aplicação são:

Usuários
  • POST /login
  • POST /cadastro
  • GET /usuarios/{id}
  • DELETE /usuários/{id}

Cadastro:

{
	"login": "user",
	"senha": "1234",
	"papel": "PROFESSOR"
}
Docentes
  • GET /docentes
  • GET /docentes/{id}
  • POST /docentes
  • PUT /docentes/{id}
  • DELETE /docentes/{id}

Cadastro:

{
	"nome": "Professor",
	"dataEntrada": "2024-01-01",
	"idUsuario": 2
}
Cursos
  • GET /cursos/{id}
  • GET /cursos/{id}/materias
  • POST /cursos
  • PUT /cursos/{id}
  • DELETE /cursos/{id}

Cadastro:

{
	"nome": "Curso"
}
Turmas
  • GET /turmas
  • GET /turmas/{id}
  • POST /turmas
  • PUT /turmas/{id}
  • DELETE /turmas/{id}

Cadastro:

{
	"nome": "Turma",
	"idProfessor": 1,
	"idCurso": 1
}
Matérias
  • GET /materias/{id}
  • POST /materias
  • PUT /materias/{id}
  • DELETE /materias/{id}

Cadastro:

{
	"nome": "Matéria",
	"idCurso": 1
}
Alunos
  • 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
}
Notas
  • 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"
}

Regras de permissões de usuários

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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages