Complete back-end application of certifications made in Spring Boot.
A partir do e-mail cadastrado, o usuário é capaz de escolher qual tecnologia ele deseja obter a certificação. Após isso, o mesmo recebe uma lista de questões referentes a tecnologia a qual ele escolheu, com suas respectivas alternativas.
O usuário então, seleciona a alternativa que ele acredita ser a correta para cada questão. Ao final, o usuário recebe a nota referente à certificação, que é baseada na quantidade de acertos. E por último, consegue visualizar sua posição em um ranking com as 10 melhores notas de alunos que também realizaram aquela certificação.
A aplicação também dispõe de tratamento de erros, impedindo que um usuário com e-mail não cadastrado realize a prova e impedindo também a realização de certificações que já foram obtidas anteriormente.
Foi realizada a Integração com PostgreSQL Database, utilizando o Docker como Container para testar a interação do banco de dados com a aplicação. Assim como o HTTPie como ferramenta para requisições REST.
Foram utilizados padrões de arquitetura de projetos MVC (Model-View-Controller), princípios do SOLID, Clean Architecture com Controllers, Use Cases, DTOs, Entidades e Repositórios, mantendo sempre as boas práticas de programação que facilitam a manutenção, escalabilidade e reusabilidade do código.
Para o desenvolvimento do projeto utilizei o Java 17, Maven, Docker, VSCode e HTTPie. Além das dependências próprias do Spring Boot: Spring Web, Spring Boot Dev Tools, Lombok, JDBC Template e Spring Data JPA.
Antes de executar o projeto, certifique-se de ter as seguintes dependências instaladas:
- Antes de começar, verifique se você possui o
Java 17
instalado em sua máquina. Se não tiver, você pode baixá-lo aqui. - Também será necessária a instalação e configuração do
Maven
, baixe aqui e configure-o em sua máquina. - Utilizaremos o
Docker
. A maneira mais fácil e recomendada é instalando o Docker Desktop, baixe-o aqui. - Foram utilizados o
VSCode
como editor de código e oHttpie
como ferramenta para requisições REST, porém estes podem ser substituídos por outros de sua preferência.
Siga as etapas abaixo para executar o projeto em sua máquina local:
Execute os seguintes comandos a partir da pasta raiz do projeto:
git clone <https://github.com/mari4souza/certification-nlw.git>
Este link pode ser encontrado no botão verde acima Code
.
Não é necssária a instalação pois as dependências que usaremos já foram instaladas previamente com as configurações padrão. São elas: Spring Web
, Spring Boot Dev Tools
, Lombok
, JDBC Template
e Spring Data JPA
.
No arquivo “Aplication Properties” definir em qual porta deverá rodar a aplicação. Exemplo: server.port=8085
.
mvn spring-boot:run
A estrutura de pastas do projeto é organizada da seguinte maneira:
/
|-- certifications/
| |-- controllers/
| | |-- RankingController.java
| |-- useCases/
| | |-- Top10RankingUseCase.java
|-- questions/
| |-- controllers/
| | |-- QuestionController.java
| |-- dto/
| | |-- AlternativesResultDTO.java
| | |-- QuestionResultDTO.java
| |-- entities/
| | |-- AlternativesEntity.java
| | |-- QuestionEntity.java
| |-- repositories/
| | |-- QuestionRepository.java
|-- students/
| |-- controllers/
| | |-- StudentController.java
| |-- dto/
| | |-- QuestionAnswerDTO.java
| | |-- StudentCertificationAnswerDTO.java
| | |-- VerifyHasCertificationDTO.java
| |-- entities/
| | |-- AnswersCertificationsEntity.java
| | |-- CertificationStudentEntity.java
| | |-- StudentEntity.java
| |-- repositories/
| | |-- CertificationStudentRepository.java
| | |-- StudentRepository.java
| |-- useCases/
| | |-- StudentCertificationAnswersUseCase.java
| | |-- VerifyIfHasCertificationUseCase.java
-
Controllers
: São responsáveis por lidar com as requisições recebidas pela aplicação. Atuam como pontos de entrada, processam os dados de entrada, interagem com os casos de uso apropriados e coordenam a resposta de volta para o usuário. -
UseCases
: Representam casos de uso específicos da aplicação, encapsulando a lógica de negócios. Cada caso de uso define uma operação específica que a aplicação pode realizar. Eles são independentes da camada de apresentação e interagem com as entidades e repositórios para realizar ações significativas para o negócio. -
DTOs
: São objetos utilizados para transferir dados entre as camadas ou componentes do sistema. -
Entities
: Representam objetos de negócios no sistema e contêm lógica de negócios associada a elas. Correspondem a objetos do mundo real e são persistidas no banco de dados. -
Repositories
: São responsáveis pela persistência de entidades. Eles encapsulam a lógica de acesso a dados e fornecem métodos para recuperar, salvar, atualizar e excluir entidades no banco de dados. Eles fornecem uma abstração sobre o armazenamento de dados, permitindo que os use cases interajam com entidades sem se preocupar com os detalhes de como essas entidades são armazenadas. Os repositórios encapsulam a lógica de acesso a dados, facilitando a troca de tecnologias de armazenamento sem afetar o restante da aplicação.
Se você deseja contribuir para este projeto, siga as etapas abaixo:
- Faça um fork deste repositório.
- Crie um branch:
git checkout -b <nome_branch>
. - Faça suas alterações e confirme-as:
git commit -m '<mensagem_commit>'
- Envie para o branch original:
git push origin <nome_do_projeto> / <local>
- Criar a solicitação de pull.
Como alternativa, consulte a documentação do GitHub sobre como criar uma solicitação de pull.
Este projeto está sob licença. Consulte LICENSE para obter mais informações.
Maria Eduarda Cardoso |