O objetivo deste desafio é criar uma API RESTful utilizando ASP.NET 8 para gerenciar uma entidade de exemplo, como "Produto" 🛒, conectando-se a um banco de dados PostgreSQL usando Entity Framework. A API também consumirá o serviço Fixer.io para realizar conversões de moedas 💱. Espera-se que o desenvolvimento siga boas práticas de engenharia de software, incluindo SOLID, Clean Code, TDD, Clean Architecture e DDD.
- CRUD de Produtos: Implementar as operações de criação, leitura, atualização e deleção de produtos no banco de dados PostgreSQL 🗄️.
- Integração com API Externa: Consumir a API Fixer.io para obter taxas de câmbio e realizar a conversão de preços de produtos para diferentes moedas 💲.
- Listagem de Produtos com Conversão de Moeda: Deve ser possível listar os produtos com seus preços convertidos para uma ou mais moedas com base nas taxas da API Fixer.
- Paginação e Filtros: Implementar paginação e filtros nos endpoints de listagem de produtos.
- Arquitetura Limpa (Clean Architecture): O projeto deve seguir os princípios da Clean Architecture, separando camadas de domínio, aplicação, infraestrutura e interfaces de forma clara.
- Design Orientado a Domínio (DDD): O domínio deve ser modelado seguindo os conceitos de DDD, com agregados, entidades e repositórios devidamente definidos.
- Boas Práticas de SOLID: O código deve respeitar os princípios SOLID, com separação de responsabilidades, uso adequado de injeção de dependências e padrões de design apropriados.
- Testes Unitários e Testes de Integração (TDD): A aplicação deve ser construída com a abordagem de TDD, utilizando xUnit para cobrir as funcionalidades principais e integração com a API externa.
- Segurança e Boas Práticas REST: A API deve seguir boas práticas de segurança, como autenticação/autorização (OAuth2 ou JWT), versionamento de API e tratamento adequado de erros.
- Monitoramento e Observabilidade: Implementar logging, monitoramento e rastreamento (Tracing) usando ferramentas como Serilog e OpenTelemetry.
- Containerização: Deve ser criado um
Dockerfile
edocker-compose
para facilitar a configuração e execução da aplicação, com suporte a múltiplos ambientes (dev, staging, produção). - CI/CD: Implementar um pipeline de CI/CD usando GitHub Actions ou outra ferramenta, com build, testes e deploy automatizado no provedor de nuvem de sua escolha (AWS, Azure, Google Cloud, etc.).
- Publicação em Cloud: A API deve ser publicada em um ambiente de produção no provedor de nuvem de sua escolha.
- A API Fixer será utilizada para obter taxas de câmbio e realizar as conversões de moeda. A implementação deve ser desacoplada, utilizando o padrão Service ou Adapter para integração com serviços externos, permitindo facilidade de substituição ou expansão.
- Código Fonte: O projeto deve ser entregue em um repositório privado no GitHub, com um
README.md
detalhando a arquitetura, decisões técnicas, instruções de execução e endpoints da API. - Testes: Incluir cobertura de testes unitários e de integração para o CRUD de produtos e integração com a API Fixer.
- Pipeline CI/CD: Pipeline configurado no GitHub Actions (ou ferramenta similar) com etapas de build, testes e deploy.
- Ambiente em Produção: A API deve estar publicada em um ambiente de produção no provedor de nuvem de sua escolha, com logs e monitoramento configurados.
- Documentação da API: Usar Swagger para documentar os endpoints da API.
- Desempenho e Segurança: Realizar otimizações de desempenho (cache, consultas otimizadas) e garantir segurança (autenticação, autorização, validação de entrada).
- Design e Arquitetura: Avaliação da estrutura do código e adesão aos princípios de SOLID, DDD e Clean Architecture.
- Qualidade do Código: Limpeza do código (Clean Code), organização, nomeação, comentários, e uso adequado de padrões de design.
- Testes: Cobertura e qualidade dos testes unitários e de integração.
- Performance e Segurança: Desempenho da API e boas práticas de segurança implementadas.
- Observabilidade: Avaliação da implementação de logs, monitoramento e métricas.
- Entregas Técnicas: Avaliar a consistência do pipeline CI/CD, uso de Docker e implantação no provedor de nuvem.
Boa sorte! Aguardamos sua solução 🚀.