Desafio técnico que visava implementar um back end usando .Net Core e um front end utilizando Angular.
É necessário ter um banco SQL Server e rodar este script, além de atualizar a ConnectionString do arquivo appsettings.json.
Em seguida basta roda o projeto iFood.Mercado.API que automaticamente irá subir uma versão já deployada do front end da aplicação;
Para desenvolver o desafio foram usados os seguintes recursos:
- Sistema Operacional: MacOS Mojave
- IDE: Visual Studio fo Mac e Visual Studio Code
- Banco de Dados: SQL Server rodando em Docker
O desafio foi implementado como solicitado nos requisitos pedidos. Entendo que os requisitos foram simplificados para não tornar o desafio maior que o necessário, porém gostaria de registrar algumas alternativas ou estratégias a serem adotadas em cenários reais:
- Autenticação: A abordagem mais adequada para os cenários de SPA com uma WEB API seria o uso de um
Token JWT
ao invés deHTTP Basic Authentication
. - Notification Pattern: Devido a simplicidade do contexto fiz uso de exceções para validação de domínio, porém em cenários mais complexos é interessante substituir esse tipo de estrégia pelo padrão Notification Pattern, visto que o lançamento de exceção de forma indiscriminada, e em grande escala de usuários, pode afetar a performance da aplicação.
- Armazenamento de Imagem: Acredito que a forma mais adequada para armazenamento de imagens seja através de serviços de Storages como
S3
eAzure Blob Storage
por exemplo. - Modelos de Escrita e Leitura: Como o cenário do desafio era algo bem simples, a estratégia de separar em modelo de escrita e leitura não foi adotada. Entretanto em cenários mais complexos na qual se tenha múltiplas visões de uma única informação, vale adotar a estratégia para melhorar segregação de código e ganho de performance.
- Async/Await: Vale destacar que para aplicações que possuam grande volume de acesso, o uso de
Async
eAwait
trará ganho de performnace. O mesmo não foi usado no desafio devido a natureza do exercício. - Swagger: Não foi solicitado, porém está disponível a documentação da API do Desafio, através da rota
/swagger
.
Seguem abaixo algumas imagens referentes a versão Desktop e Mobile para ilustrar a responsividade implementada no desafio: