{"id":21456197,"url":"https://github.com/marcosfshirafuchi/devsuperior-java-spring-professional-desafio-03","last_synced_at":"2026-04-11T19:06:18.655Z","repository":{"id":248037206,"uuid":"827579357","full_name":"marcosfshirafuchi/DEVSUPERIOR-Java-Spring-Professional-Desafio-03","owner":"marcosfshirafuchi","description":"DEVSUPERIOR : Java Spring Professional - Desafio 03","archived":false,"fork":false,"pushed_at":"2024-07-12T21:19:31.000Z","size":21,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-17T03:27:03.058Z","etag":null,"topics":["desenvolvimento-java","devsuperior","h2-database","java","maven","maven-pom","nelio-alves","nelioalves","poo","postman","postman-api","postman-test","spring","spring-boot","springboot","springdata-jpa","springdatajpa"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marcosfshirafuchi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-07-12T00:06:30.000Z","updated_at":"2024-07-12T21:19:35.000Z","dependencies_parsed_at":"2024-07-12T02:04:01.241Z","dependency_job_id":null,"html_url":"https://github.com/marcosfshirafuchi/DEVSUPERIOR-Java-Spring-Professional-Desafio-03","commit_stats":null,"previous_names":["marcosfshirafuchi/devsuperior-java-spring-professional-desafio-03"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/marcosfshirafuchi/DEVSUPERIOR-Java-Spring-Professional-Desafio-03","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcosfshirafuchi%2FDEVSUPERIOR-Java-Spring-Professional-Desafio-03","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcosfshirafuchi%2FDEVSUPERIOR-Java-Spring-Professional-Desafio-03/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcosfshirafuchi%2FDEVSUPERIOR-Java-Spring-Professional-Desafio-03/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcosfshirafuchi%2FDEVSUPERIOR-Java-Spring-Professional-Desafio-03/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marcosfshirafuchi","download_url":"https://codeload.github.com/marcosfshirafuchi/DEVSUPERIOR-Java-Spring-Professional-Desafio-03/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcosfshirafuchi%2FDEVSUPERIOR-Java-Spring-Professional-Desafio-03/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278494638,"owners_count":25996414,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-05T02:00:06.059Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["desenvolvimento-java","devsuperior","h2-database","java","maven","maven-pom","nelio-alves","nelioalves","poo","postman","postman-api","postman-test","spring","spring-boot","springboot","springdata-jpa","springdatajpa"],"created_at":"2024-11-23T05:14:44.371Z","updated_at":"2025-10-05T17:59:37.205Z","avatar_url":"https://github.com/marcosfshirafuchi.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003ca href=\"https://imgbb.com/\"\u003e\u003cimg src=\"https://i.ibb.co/51bfmLv/image-2024-07-01-T11-45-10-371-Z.png\" alt=\"image-2024-07-01-T11-45-10-371-Z\" border=\"0\" width=\"300\"\u003e\u003c/a\u003e Java Spring Professional - Desafio 03\n\n#### Desenvolvido na linguagem Java por:\n- [Marcos Shirafuchi](https://github.com/marcosfshirafuchi)\n## Formação Desenvolvedor Moderno Módulo: Back end\n\u003cb\u003eCapítulo: API REST, camadas, CRUD, exceções, validações\u003c/b\u003e\n\n## DESAFIO: CRUD de clientes\n\nVocê deverá entregar um projeto Spring Boot contendo um CRUD completo de web services REST para\nacessar um recurso de clientes, contendo as cinco operações básicas aprendidas no capítulo:\n- Busca paginada de recursos\n- Busca de recurso por id\n- Inserir novo recurso\n- Atualizar recurso\n- Deletar recurso\n\nO projeto deverá estar com um ambiente de testes configurado acessando o banco de dados H2, deverá usar\nMaven como gerenciador de dependência, e Java como linguagem.\u003cbr\u003e\u003cbr\u003e\nUm cliente possui nome, CPF, renda, data de nascimento, e quantidade de filhos. A especificação da\nentidade Client é mostrada a seguir (você deve seguir à risca os nomes de classe e atributos mostrados no\ndiagrama):  \u003cbr\u003e\u003cbr\u003e\n\u003ca href=\"https://imgbb.com/\"\u003e\u003cimg src=\"https://i.ibb.co/k3gzBTw/image-2024-07-12-T00-12-28-278-Z.png\" alt=\"image-2024-07-12-T00-12-28-278-Z\" border=\"0\"\u003e\u003c/a\u003e\n\u003cbr\u003e\u003cbr\u003e\n\n\u003cb\u003eSeu projeto deverá fazer um seed de pelo menos 10 clientes \u003c/b\u003ecom dados SIGNIFICATIVOS (não é para\nusar dados sem significado como “Nome 1”, “Nome 2”, etc.).\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eSeu projeto deverá tratar as seguintes exceções:\u003c/b\u003e\n- Id não encontrado (para GET por id, PUT e DELETE), retornando código 404.\n- Erro de validação, retornando código 422 e mensagens customizada para cada campo inválido. As\nregras de validação são:\n  - Nome: não pode ser vazio\n  - Data de nascimento: não pode ser data futura (dica: use @PastOrPresent)\n\u003cbr\u003e\u003cbr\u003e\n- \u003ci\u003eAtenção:\u003c/i\u003e crie um \u003cb\u003enovo projeto\u003c/b\u003e para este trabalho. Não é para simplesmente acrescentar a classe\n- \u003ci\u003eAtenção:\u003c/i\u003e lembre-se de que por padrão a JPA transforma nomes de atributos em camelCase para\nsnake_case, como foi o caso do campo imgUrl das aulas, que no banco de dados tinha o nome\nimg_url. Assim, o campo \u003cb\u003ebirthDate acima será criado no banco de dados como birth_date, então\nseu script SQL deverá seguir este padrão.\u003c/b\u003e\n- \u003ci\u003eAtenção:\u003c/i\u003e cuidado para não salvar no seu projeto arquivos e pastas que não devem ser salvas no Git,\ntais como a pasta .metadata do Eclipse ou .idea do Intellij.\n\n## Como o trabalho será corrigido?\n\u003cb\u003e1) Importação do projeto\u003c/b\u003e\u003cbr\u003e\nO professor deverá ser capaz de fazer um simples clone do projeto Github, e importar e executar o mesmo na\nIDE sem necessidade de qualquer configuração especial diferente daquelas das aulas.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003e2) Testes manuais no Postman\u003c/b\u003e\u003cbr\u003e\nO professor já terá preparado em seu computador as requisições Postman abaixo. Todas elas deverão\nfuncionar corretamente:\u003cbr\u003e\u003cbr\u003e\nBusca de cliente por id\u003cbr\u003e\n\u003cb\u003eGET /clients/1\u003c/b\u003e\u003cbr\u003e\u003cbr\u003e\nBusca paginada de clientes\u003cbr\u003e\n\u003cb\u003eGET /clients?page=0\u0026size=6\u0026sort=name\u003c/b\u003e\u003cbr\u003e\u003cbr\u003e\nInserção de novo cliente\u003cbr\u003e\n\u003cb\u003ePOST /clients\u003c/b\u003e\n```\n{\n\"name\": \"Maria Silva\",\n\"cpf\": \"12345678901\",\n\"income\": 6500.0,\n\"birthDate\": \"1994-07-20\",\n\"children\": 2\n}\n```\n\n\nAtualização de cliente\u003cbr\u003e\n\n\u003cb\u003ePUT /clients/1\u003c/b\u003e\n```\n{\n\"name\": \"Maria Silvaaa\",\n\"cpf\": \"12345678901\",\n\"income\": 6500.0,\n\"birthDate\": \"1994-07-20\",\n\"children\": 2\n}\n```\n\u003cbr\u003e\nDeleção de cliente\u003cbr\u003e\n\u003cb\u003eDELETE /clients/1\u003c/b\u003e\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eCHECKLIST:\u003c/b\u003e\n\n\n1. Busca por id retorna cliente existente\u003cbr\u003e\n2. Busca por id retorna 404 para cliente inexistente\u003cbr\u003e\n3. Busca paginada retorna listagem paginada corretamente\u003cbr\u003e\n4. Inserção de cliente insere cliente com dados válidos\u003cbr\u003e\n5. Inserção de cliente retorna 422 e mensagens customizadas com dados inválidos\u003cbr\u003e\n6. Atualização de cliente atualiza cliente com dados válidos\u003cbr\u003e\n7. Atualização de cliente retorna 404 para cliente inexistente\u003cbr\u003e\n8. Atualização de cliente retorna 422 e mensagens customizadas com dados inválidos\u003cbr\u003e\n9. Deleção de cliente deleta cliente existente\u003cbr\u003e\n10. Deleção de cliente retorna 404 para cliente inexistente\u003cbr\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcosfshirafuchi%2Fdevsuperior-java-spring-professional-desafio-03","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarcosfshirafuchi%2Fdevsuperior-java-spring-professional-desafio-03","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcosfshirafuchi%2Fdevsuperior-java-spring-professional-desafio-03/lists"}