Skip to content

oErikGonzaga/listaContatos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

listaContatos

Aplicação de Lista de Contatos.


Utilizando Java 17 com SpringBoot e Maven 3.8.6.
SpringData, SpringWeb, Lombok e MySQL.
Arquitetura de Software padrão MVC.


Este projeto Java implementa exemplos de requisições HTTP utilizando os métodos GET e POST, PUT E DELETE via REST API.

A aplicação consiste em um sistema de criação de lista de Contatos. Aonde os dados de Nome e Documentação do Usuário são: Inseridos, tratados e armazenado no Banco de Dados.

Uma divisão de Classes é feita entre pacotes com suas respectivas funcionalidades.


  • Controllers:

    • ContatosController
  • Models:

    • Contatos
  • Repositories:

    • ContatosRepository
  • Services:

    • ContatosService
    • ContatosServiceImpl

Classe Controller

  • ContatosController

A Classe Controller ContatosController, fica responsável pela nossa entrada de dados.
Ela é a API (Application Programming Interface), que gerencia nossas requisições (REQUESTS), através dos verbos GET, POST, PUT, PATCH e DELETE, aos quais são utilizados para operações de CRUD (CREATE, READ, UPDATE e DELTE) no Banco de Dados. Juntos suas respectivas regras e requerimentos de URL, tais como: PathParam, QueryParams, Headers e Body.

Para isso foi utilizado a Interface @RestController para marcamos a Classe como um EndPoint e mapeamos a entrada da classe com:


@RequestMapping("contatos")

  • Ele adiciona um path fixo antecedente aos demais paths.

@GetMapping(value = "check")

  • Utiliza o verbo GET para checar nossa conexão com o EndPoint.

@PostMapping("cadastrar")

  • Responsável por receber um Body com nossos dados através de @RequestBody e armazena-los em nossa Classe Modelo: Contato.

@GetMapping("listar")

  • Lista todos dos contatos armazenados em nosso Banco de Dados com filtro, checando contatos ativos e inativos.

@GetMapping("{id}")

  • Consulta um contact por um id especifico que é gerado automaticamente no cadastro do contact.

@PatchMapping("inativar/{id}") e @PatchMapping("ativar/{id}")

  • Inativa e Ativa um contact através de um ID do fornecido do mesmo.

@DeleteMapping("{id}")

  • Exclui um contact de nosso Banco de Dados através do ID fornecido.

@PutMapping("{id}")

  • Atualiza todos ou parcialmente os dados de contact através de um contact.

  • ResponseEntity

Utilizado para "envolver" o Tipo do Método utilizado no EndPoint. Fornecendo opções de devolvermos um Código de Status, informando se a requisição foi bem sucedida ou não entre outras respostas.

Os Responses mais utilizados são os Status:

- Ok: 200
- Created: 201
- No Content: 204
- Bad Request: 400
- Not found: 404

  • Lógica de Acesso Token

Foi criado uma lógica de acesso via Header utilizando um TOKEN de acesso, ao qual é gerado e repassado ao cliente que utilizará a aplicação. Antes das operações é feito uma verificação ao Token que se correto permite a execução do restante da operação, se não, é devolvido um erro de Requisição.

Classe Privada de armazenamento do TOKEN:

private static final String TOKEN_ACCESS = "BC6X8639be18b115a9";

Lógica de Acesso:

      if (!TOKEN_ACCESS.equals(token)) 
         return ResponseEntity.badRequest().build();

Classe Model

  • Contato

A Classe model Contato é responsável por armazenar os dados que recebemos de nosso Controller. Aqui mapeamos nossas variáveis conforme as especificações passadas do nosso Banco de Dados.


@Data

  • É utilizado para gerar de forma implícita nossos métodos modificadores de acesso, os getter e setters.

@Entity

  • Indica que nossa classe é uma entidade do banco de dados.

@Table(name = "contact")

  • Indica que a classe é uma tabela do nosso banco de dados que representa

@Id

  • Acima do atributo indica que ele representa um PrimaryKey (PK) na Tabela

@Column(name = "nome", nullable = false)

  • Indica que nosso atributo corresponde ao coluna que recebe o nome indicado acima em nossa tabela.
    Nullable indica que o campo não pode ser nulo (NOT NULL).

Classes Services

São divididas em duas Classes, uma Interface e uma Implementação.


  • Interface ContatosService

Aqui estão as nossas Regras de Negócios, sendo que as classes que a implementarem terão que seguir estas regras.


  • List<Contato> listar(Boolean ativo);
    Contato cadastrar(Contato contact);
    Contato buscarPorId(String id);
    boolean inativar(String id);
    boolean ativar(String id);
    boolean deletar(String id);
    boolean atualizar(String id, String nome, String documento);

  • Classe ContatosServiceImpl

Contém todos os nossos métodos e lógicas utilizados para o tratamento de dados. Aqui recebemos e recuperamos nossas informações de nossos REQUESTS e do Banco de Dados

@Service

  • Indica que a classe é um bean do Spring

@Autowired

  • Ele permite que o Spring resolva e injete beans de colaboração em nosso bean.

@Override

  • Utilizado para sobrescrita de um método da classe pai.

Interface Repository

Esta Interface ContatosRepository extende outra chamada JpaRepository.
JpaRepository fica responsável por fazer CRUDs em nosso Banco de Dados.


Lógica dos Services

Descrição da função de cada método utilizado nas implementações de Services

Cadastrar

  • É feita uma busca no Banco de Dados e armazenado seu valor em uma variável. Seguido de uma checagem verificado se o contact com o documento informado na requisição já existe. Caso exista é retornado Null, caso não exista é gerado um id aleatório e a criacão e armazenamento do contact é realizada no Banco de Dados.

Listar

  • Feita uma verificação se o contact está ou não ativo, é retornado uma lista com todos os contatos.
  • Todos, Somente Ativos e Somente Inativos.

Buscar por Id

  • Caso o Id informado na requisição exista no Banco de Dados, é retornado o contact, do contrário retorna null.

Inativar

  • Utilizamos a função buscarPorId para verificar se o contact existe, e está ativo. Caso exista inativa-se o contact, do contrário retorna null.

Ativar

  • Utilizamos a função buscarPorId para verificar se o contact existe, e está inativo. Caso exista ativa-se o contact, do contrário retorna null.

Deletar

  • Utilizamos a função buscarPorId para verificar se o contact existe, e está ativo. Caso exista o contact é removido do Banco de Dados, do contrário retorna null.

Atualizar

  • Utilizamos a função buscarPorId para verificar se o contact existe, e está ativo.
  • Criamos uma variavel para informar se o contact está atualizado e a definimos com false.
  • Caso exista o valor do contact seja diferente de nulo,
  • diferente de vazio e diferente da requisição, definimos a variavél criada como true e atualizamos o valor informado do contact no Banco de Dados, do contrário retorna null.

IDE
Foi utilizada API Intellij idea.