O principal objetivo foi aplicar de maneira prática diversos conceitos estudados
Frontend em Angular:
NgRx: Abordagem de conceitos de Global State Management através da @ngrx/store com a manipulação de actions e dos @ngrx/effects para obter dados da API. Também foi utilizado meta-reducer para obter informações no local storage do navegador.
RxJS: Foram utilizados diversos métodos da biblioteca reativa do RxJS para a manipulação de Observables modificando as streams de dados provenientes do Backend.
Bootstrap 5: O framework Bootstrap foi utilizado para responsividade e para a estilização de componentes de maneira simples. Não obstante, a extensão SCSS foi aplicada para personalização de alguns estilos.
Angular versão 17+: Adoção de standalone components e alguns outros conceitos que o Angular 17 implementou. A aplicação foi estruturada para permanecer organizada, com a utilização de guards, inteceptors, services, interfaces, pipes, etc.
Angular Signals: Essa funcionalidade foi utilizada em alguns componentes e services para reatividade, como a exemplo do cart.service.ts em que se buscava reagir a alterações no carrinho do cliente.
Backend em .NET 8:
Integração com APIs externas (Stripe e MelhorEnvio): O sistema utiliza as classes DeliveryService e PaymentService para intregração com as APIs do MelhorEnvio (cálculo de frete) e do Stripe (para o pagamento de pedidos).
Generic Repository e Specification Pattern: Abordagem do Generic Repository para encapsular a persistência das entidades em suas respectivas tabelas de dados, conjuntamente com o padrão de design Specification Pattern para possibilitar a especificidade de determinadas entidades.
CQRS Pattern com MediatR:Implementação do padrão CQRS para separar operações de leitura e gravação de dados utilizando a biblioteca MediatR do NuGet. Além disso, foi adotado o Validation Pipeline Behavior com validações específicas da classe AbstractValidator<> para validar os campos necessários nas requisições. Desta forma, foi possível que a lógica fosse separada dos Controllers estivesse presente apenas na camada de Application, reforçando os preceitos da Clean Architecture.
Result Pattern:O padrão Result foi utilizado para encapsular o resultado das requisições com: o status de sucesso ou erro, com a mensagem de erro, e ainda o valor obtido. Ademais, foi incorporado o ValidationResult que especifica o Result para armazenar os erros de validação obtidos no Validation Pipeline Behavior.
Resource Error Messages .resx: Criação de arquivos .resx para mensagens personalizadas de validação de campos ou mensagens de erro, em inglês e português. Na camada de API está presente um Culture Middleware para retornar as mensagens de acordo com a linguagem que é adotada pelo navegador do usuário.
Desenvolvedor FullStack C# .NET e Angular
Analista de Sistemas
Bacharel em Direito
"A única maneira de ir rápido é ir bem. E a única maneira de ir bem é aprender."