{"id":21285172,"url":"https://github.com/alissonwenceslau/dscatalog","last_synced_at":"2025-03-15T15:12:12.375Z","repository":{"id":194899003,"uuid":"587804387","full_name":"AlissonWenceslau/dscatalog","owner":"AlissonWenceslau","description":"Project backend for products catalog","archived":false,"fork":false,"pushed_at":"2023-09-15T21:15:14.000Z","size":437,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-22T05:15:01.066Z","etag":null,"topics":["autorization","beans","h2-database","injection-dependency","inversion-of-control","jwt-token","mockito","oauth2","resource-server","spring-sercurity-oauth2","spring-validation"],"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/AlissonWenceslau.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":"2023-01-11T16:17:36.000Z","updated_at":"2023-09-15T00:13:29.000Z","dependencies_parsed_at":null,"dependency_job_id":"8bd32bfb-1312-4abb-9345-090e8d9b53d0","html_url":"https://github.com/AlissonWenceslau/dscatalog","commit_stats":null,"previous_names":["alissonwenceslau/dscatalog"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlissonWenceslau%2Fdscatalog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlissonWenceslau%2Fdscatalog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlissonWenceslau%2Fdscatalog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlissonWenceslau%2Fdscatalog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlissonWenceslau","download_url":"https://codeload.github.com/AlissonWenceslau/dscatalog/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243746200,"owners_count":20341203,"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":["autorization","beans","h2-database","injection-dependency","inversion-of-control","jwt-token","mockito","oauth2","resource-server","spring-sercurity-oauth2","spring-validation"],"created_at":"2024-11-21T11:18:35.905Z","updated_at":"2025-03-15T15:12:12.352Z","avatar_url":"https://github.com/AlissonWenceslau.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DSCatalog\n\nEsse é um projeto backend, desenvolvido em java utilizando spring boot na **versão 2.4.4** visando performance para o seu prpósito. A ideia do projeto é criar um sistema simples de catálogo de produtos, onde terá crud de usuários e produtos. Pensando ao longo prazo, apesar deste projeto ser simples, ele conta com as melhores práticas de programação, obedecendo  a modelagem abaixo no qual foi proposto,  respeitando o padrão em camadas e suas responsabilidades, aplicando o princípio de inversão de controle e injeção de dependência por meio do spring framework e disponibilizando os dados via web services por meio de uma API Rest. \n\nO projeto também conta com **testes unitários** utilizando mockito, o que dá a flexibilidade de testar cada entidade de forma individual. Além disso, foi implementado **testes de integração** para que o sistema possa ser testado como um todo e claro, tudo isso seguindo as boas práticas bem como o padrão **Arrange**, **Act** \u0026 **Assert** para criação, execução das ações e declaração do que deveria acontecer em cada teste.\n\nPensando em validação, o projeto conta com **bean validation** para que o backend se garanta nas validações da aplicação, como por exemplo: A entidade usuário precisa dos campos **nome** e **e-mail** para cadastro, e aí que entra as constraints **@NotNull** e **@Email** que garante que esses atributos estejam adequados para a consistência e persistência do cadastro do usuário no banco de dados, caso contrário, há um tratamento de exceções para capturar esses possíveis GAPs.\n\nPensando na segurança, foi implementado o protocolo OAuth2 para autenticação e autorização aos endpoints configurados, visto que um usuário pode ter papeis de **ROLE_ADMIN** e **ROLE_OPERATOR** para controle de acesso aos endpoints. Como método para geração de token, foi utilizado o padrão JWT que funciona muito bem e é muito utilizado em **Web Services**\n\nO projeto foi dividido em cinco camadas, sendo elas: entidades, repositórios, serviços, objeto de transferência de dados \u0026 recursos, tornando a aplicação flexivel e escalável!\n\nEste é um monorepo pensado em separar o backend de uma possível implementação de um frontend!\n\n## Técnologias implementadas\n\n1. Spring Boot: Fornece toda configuração do projeto inicial\n2. Spring Data: Fornece uma abordagem consistente para a camada de acesso a dados\n3. Spring Framework: Fornece todo o mecanismo de gerenciamento do projeto\n4. Spring Security: Fornece o mecanismo para segurança da aplicação\n5. Hibernate bean validation: Módulo no qual fornece o esquema de bean validation\n6. Mockito: Fornece mecânismo para testes da aplicação\n7. H2 Database: É um banco de dados relacional em memória\n8. Padrão de Arquitetura em Camadas: Visando produtividade, manutenabilidade e escalabilidade do sistema\n\n\u003cimg src=\"assets/modelo-conceitual.png\"\u003e\n\n## Postman\n\n### Login\n![Login](assets/postman-login.png)\n\n### New category\n```json\n{\n    \"name\":\"Garden\"\n}\n``````\n### New product\n```json\n{\n  \"date\": \"2020-07-20T10:00:00Z\",\n  \"description\": \"The new generation PS5 video game\",\n  \"name\": \"Console PS5\",\n  \"imgUrl\": \"\",\n  \"price\": 6000.0,\n  \"categories\": [\n    {\n      \"id\": 1\n    },\n    {\n      \"id\": 3\n    }\n  ]\n}\n```\n### Nova Categoria\n![New Category](assets/postman-nova-categoria.png)\n### Novo Produto\n![New Product](assets/postman-novo-produto.png)\n\n## Exceções\n![New Product](assets/postman-excecao-produtos.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falissonwenceslau%2Fdscatalog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falissonwenceslau%2Fdscatalog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falissonwenceslau%2Fdscatalog/lists"}