{"id":25312794,"url":"https://github.com/alym62/challenge","last_synced_at":"2026-05-07T02:33:19.000Z","repository":{"id":276511382,"uuid":"929417987","full_name":"Alym62/challenge","owner":"Alym62","description":null,"archived":false,"fork":false,"pushed_at":"2025-02-10T14:16:41.000Z","size":198,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-07T13:11:20.905Z","etag":null,"topics":["java","jwt","lombok","postgres","react","springboot"],"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/Alym62.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}},"created_at":"2025-02-08T14:03:27.000Z","updated_at":"2025-02-10T14:16:44.000Z","dependencies_parsed_at":"2025-02-08T18:39:52.512Z","dependency_job_id":null,"html_url":"https://github.com/Alym62/challenge","commit_stats":null,"previous_names":["alym62/challenge"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Alym62/challenge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alym62%2Fchallenge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alym62%2Fchallenge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alym62%2Fchallenge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alym62%2Fchallenge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Alym62","download_url":"https://codeload.github.com/Alym62/challenge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alym62%2Fchallenge/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265333097,"owners_count":23748727,"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","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":["java","jwt","lombok","postgres","react","springboot"],"created_at":"2025-02-13T15:34:54.727Z","updated_at":"2026-05-07T02:33:13.980Z","avatar_url":"https://github.com/Alym62.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Visão geral\n\n*Objetivo:* API para cadastro de contatos com autenticação via JWT e interface para o usuário.\n\n*Tecnologias utilizadas:*\n- Backend: Java, Spring boot(JPA, Spring security, Spring web, Lombok, Mapstruct, JWT), Gradle, PostgrSQL.\n- Frontend: NextJs, Anti design e Typescript.\n- Infraestrutura: Docker\n\n## Documentação Backend\n\n*Arquitetura do projeto*: Foi utilizado uma arquitetura limpa visando sempre proteger o core da aplicação livrando o mesmo de libs externas ou algum acoplamento com algum tipo de framework. Utilizando bons padrões da próprio Java.\n\n*Banco de dados:* No banco de dados a modelagem de dados foi feita seguindo o ACID, então a modelagem de dados foi bastante importante na hora de criação das tabelas.\n\n*API:* Abaixo está todos os endpoints:\n\nContatos\n```http\n  GET /api/v1/contato/list\n  Authorization: Bearer {token}\n```\n```http\n  GET /api/v1/contato/{id}\n  Authorization: Bearer {token}\n```\n```http\n  GET /api/v1/contato/pager?page={numero}\u0026size={tamanho}\n  Authorization: Bearer {token}\n```\n```http\n  POST /api/v1/contato/create\n  Authorization: Bearer {token}\n```\n```http\n  PUT /api/v1/contato/update/{id}\n  Authorization: Bearer {token}\n```\n```http\n  DELETE /api/v1/contato/delete/{id}\n  Authorization: Bearer {token}\n```\n\nUsuários\n```http\n  GET /api/v1/usuario/list\n  Authorization: Bearer {token}\n```\n```http\n  GET /api/v1/usuario/{id}\n  Authorization: Bearer {token}\n```\n```http\n  POST /api/v1/usuario/create\n```\n```http\n  PUT /api/v1/usuario/update/{id}\n  Authorization: Bearer {token}\n```\n```http\n  DELETE /api/v1/usuario/delete/{id}\n  Authorization: Bearer {token}\n```\n\nAutenticação\n```http\n  POST /api/v1/auth/login\n```\n\n*Autenticação e autorização:* Foi utilizado o Spring Security junto com o JWT para que o usuário possa se autenticar na aplicação.\n\n## Documentação Frontend\n*Arquitetura do projeto:* Foi utilizado uma estrutura que a comunidade do NextJs utiliza muito quando temos alguma rota na página, hooks personalizados, chamadas a API e componentes personalizados.\n\n*Componentes:* Nesse projeto utilizei a biblioteca para a geração de componentes Anti design.\n\n*Consumo de API*: Utilizei o Axios para fazer chamadas a API. Decidi utilizar o Axios pela questão de simplicidade para poder fazer as requisições configurar headers para autorização e etc.\n\n*Autenticação e autorização:* Na tela de login quando o usuário conseguir se autenticar o token é colocado automaticamente no local storage para que nas próximas requisições ele esteja autorizado a fazer as chamadas a API.\n\n*Fluxo de navegação:* Ao entrar na tela inicial temos uma tela de login/registro para se caso o usuário não estiver cadastrado no sistema. Basta colocar o e-mail e senha para que possa se registrar e depois é só utilizar o mesmo para se autenticar. Logo após fazer o login você será redirecionado para a página principal na qual contém uma tabela com os dados dos contatos adicionados no sistema. Nessa mesma tela você vai poder filtrar por nome e email do contato.\n\n## Infraestrutura\n\n*Desenvolvimento/Deploy:* Utilizei o Docker para empacotamento do backend e para subir o banco de dados PostgreSQL.\n\n## Modelagem do sistema\n\n\u003cimg src=\"./assets/modelagem-do-sistema.png\"\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falym62%2Fchallenge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falym62%2Fchallenge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falym62%2Fchallenge/lists"}