Skip to content

caetanojpo/tivia-test

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TIVIA TEST

Aplicação back-end utilizando Java e Spring Boot, baseada em um teste para vaga de Desenvolvedor Back-end Java pela empresa TIVIA. O presente tem como objetivo o cadastro de Beneficiários e seus respectivos Documentos, a relação entre as duas entidades é de 1 para muitos respectivamente.

📌 Features exigidos no teste

  • Cadastrar um beneficiário junto com seus documentos;
  • Listar todos os beneficiários cadastrados;
  • Listar todos os documentos de um beneficiário a partir de seu id;
  • Atualizar os dados cadastrais de um beneficiário;
  • Remover um beneficiário;
  • Implementar autenticação/autorização para acesso aos endpoints;
  • Fornecer a documentação dos endpoints utilizando Swagger;

🔨 Pré-requisitos

Criar uma aplicação utilizando Java e Spring Boot que forneça uma API REST para manter o cadastro de beneficiários de um plano de saúde.

🎲 Iniciando projeto pela primeira vez

# Clone este repositório
git clone https://github.com/caetanojpo/tivia-test.git

# Inicie a aplicação com uma IDE de sua preferência e digite no terminal
mvn clean install
mvn spring-boot:run

#Acesse o seguinte endereço no navegador
http://localhost:8080/swagger-ui/index.html

🛠 Detalhes Tecnicos

  • Java 17
  • Arquitetura baseada em Clean Architecture
  • Criação de Annotations para validação de dados
  • Swagger
  • Banco H2
  • Testes unitários
  • Spring Security
  • BCryptPasswordEncoder

DESAFIO

Trata-se de desenvolvimento de API Rest, primordialmente baseada em duas Entidades, quais sejam Beneficiário e Documento, com os desafios elencados em tópico anterior. As entidades foram modeladas com os seguintes atributos, em uma relação de 1 para muitos na ordem que segue:

Beneficiario

  • id;
  • nome;
  • telefone;
  • dataNascimento;
  • dataInclusao;
  • dataAtualizacao.

Documento

  • id;
  • tipoDocumento;
  • descricao;
  • dataInclusao;
  • dataAtualizacao.

POSSIBILIDADES PARA RESOLVER O DESAFIO

Para o desenvolvimento foi escolhida a utilização de arquitetura baseada em Clean Architecture, com o intuito de fazer o uso de boas práticas de programação e deixar o core da aplicação isolado, deixando o uso de frameworks na camada de infraestrutura.

A criação de um novo Beneficiário pode, ou não, ser realizada em conjunto com a sua lista de Documentos, caso o Beneficiario seja cadastrado sem documentos há um endpoint especifico para o cadastro e vinculação de Documentos a um Beneficiario especifico.

Dada a opção de aplicar o sistema de autorização/autenticação no projeto, tomei a liberdade de modelar uma entidade User para lidar com toda a lógica de autenticação.

A documentação da aplicação está disponível no swagger e, também, disponilizei alguns registros em cada tabela, principalmente na User, para facilitar a obtenção de um Bearer Token.

POST localhost:8080/api/users/login

{
    "email":"teste@teste.com",
    "password": "!123Teste"
}

SOLID, CLEAN ARCH E BOAS PRATICAS DE PROGRAMAÇÃO.

Para o desenvolvimento do projeto tentei fazer ao máximo o uso de boas práticas. A nível de código podemos ver a utilização de alguns princípios do SOLID. Tais como o uso de single responsibility principle, que pode ser observado na implementação de classes consistentes, pequenas, e que possuem um unico objetivo para a sua existência. Assim como a inversão de depêndencia, utilização de Beans, e uso de interfaces coesas, para fazer o bom uso de seus métodos quando implementadas.

O projeto possui algumas características de arquitetura limpa, ele é dividido nas seguintes camadas:

  • DOMAIN: O coração da aplicação, onde estão contidos modelos, repositorio e exceptions gerais.
  • INFRA: Camada que possui a responsabilidade de conversar com o mundo externo, aqui temos os controllers, implementação da database, assim como as configurações do projeto e definições de beans.
  • USECASE: É a responsável por conter as regras crucias de negocio, são aquelas regras que sempre existiram na empresa e eram executadas de forma manual.

TESTES UNITÁRIOS

Foram escritos testes unitários para as controladoras das 3 entidades.

PROPOSTAS DE MELHORIA

  • Construir a aplicação em microsserviços, o que possibilita a utilização de um Broker, como RabbitMQ, para lidar com as trocas de mensagens entre os serviços, isso melhoraria a estruturação, manutenção e confiabilidade de todo o sistema.
  • Migrar a utilização de bancos e outras ferramentas para o Docker.
  • A depender da composição e necessidade do projeto, poderia se estudar a utilização de um banco NoSQL, como MongoDB, a fim de trazer flexibilidade e dinamismo para a estruturação dos documentos.
  • Utilização do redis para se trabalhar com cache e evitar que o usuário envie a mesma senha por diversas vezes, derrubando servidor.
  • A entidade Documento possui o campo "descricao", contudo o mesmo leva a uma confusão, pois pode não remeter à ideia de se tratar do número do documento, seria adequado, por boas práticas, alterar o nome do campo ou acrescentar um novo.

Tecnologias

java spring swagger

Autor

Criado por João Pedro Caetano.

Linkedin Badge Gmail Badge

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages