📍 DEVSUPERIOR / JAVA SPRING PROFESSIONAL / CHALLENGES / CLIENTS CRUD
📅 Augost 07, 2023 - 🚩 São Paulo, Brazil - 😁 Mauricio Mityo Hidani
Versões utilizadas no desafio:
- Find by Id GET | HTTP STATUS 200 OK http://localhost:8080/clients/1
- Find All GET | HTTP STATUS 200 OK http://localhost:8080/clients?page=0&size=6&sort=name
- Insert POST | HTTP STATUS 201 CREATED http://localhost:8080/clients
- Update by id PUT | HTTP STATUS 200 OK http://localhost:8080/clients/1
- Delete by id DELETE | HTTP STATUS 204 NO CONTENT http://localhost:8080/clients/1:
Você deverá entregar um projeto Spring Boot contendo um CRUD completo de web services REST para acessar um recurso de clientes, contendo as cinco operações básicas aprendidas no capítulo:
- Busca paginada de recursos
- Busca de recurso por id
- Inserir novo recurso
- Atualizar recurso
- Deletar recurso
O projeto deverá estar com um ambiente de testes configurado acessando o banco de dados H2, deverá usar Maven como gerenciador de dependência, e Java como linguagem.
Um cliente possui nome, CPF, renda, data de nascimento, e quantidade de filhos. A especificação da entidade Client é mostrada a seguir (você deve seguir à risca os nomes de classe e atributos mostrados no diagrama):
erDiagram
Client {
BIGINT ID PK
VARCHAR NAME
VARCHAR CPF
DECIMAL INCOME
DATE BIRTH_DATE
INT CHILDREN
}
Seu projeto deverá fazer um seed de pelo menos 10 clientes com dados SIGNIFICATIVOS (não é para usar dados sem significado como “Nome 1”, “Nome 2”, etc.).
Seu projeto deverá tratar as seguintes exceções:
- Id não encontrado (para GET por id, PUT e DELETE), retornando código 404.
- Erro de validação, retornando código 422 e mensagens customizada para cada campo inválido. As regras de validação são:
- Nome: não pode ser vazio
- Data de nascimento: não pode ser data futura (dica: use @PastOrPresent)
Atenção: crie um novo projeto para este trabalho. Não é para simplesmente acrescentar a classe Client no projeto feitos nas aulas.
Atenção: lembre-se de que por padrão a JPA transforma nomes de atributos em camelCase para snake_case, como foi o caso do campo imgUrl das ulas, que no banco de dados tinha o nome img_url. Assim, o campo birthDate acima será criado no banco de dados como birth_date, então seu script SQL deverá seguir este padrão.
Atenção: cuidado para não salvar no seu projeto arquivos e pastas que não devem ser salvas no Git, tais como a pasta .metadata do Eclipse ou .idea do Intellij.
O professor deverá ser capaz de fazer um simples clone do projeto Github, e importar e executar o mesmo na IDE sem necessidade de qualquer configuração especial diferente daquelas das aulas.
O professor já terá preparado em seu computador as requisições Postman abaixo. Todas elas deverão funcionar corretamente:
Busca de cliente por id
GET /clients/1
Busca paginada de clientes
GET /clients?page=0&size=6&sort=name
Inserção de novo cliente
POST /clients
{
"name": "Maria Silva",
"cpf": "12345678901",
"income": 6500.0,
"birthDate": "1994-07-20",
"children": 2
}
Atualização de cliente
PUT /clients/1
{
"name": "Maria Silvaaa",
"cpf": "12345678901",
"income": 6500.0,
"birthDate": "1994-07-20",
"children": 2
}
Deleção de cliente
DELETE /clients/1
CHECKLIST:
- Busca por id retorna cliente existente
- Busca por id retorna 404 para cliente inexistente
- Busca paginada retorna listagem paginada corretamente
- Inserção de cliente insere cliente com dados válidos
- Inserção de cliente retorna 422 e mensagens customizadas com dados inválidos
- Atualização de cliente atualiza cliente com dados válidos
- Atualização de cliente retorna 404 para cliente inexistente
- Atualização de cliente retorna 422 e mensagens customizadas com dados inválidos
- Deleção de cliente deleta cliente existente
- Deleção de cliente retorna 404 para cliente inexistente