API DE COMPRA DE APLICATIVOS
Requisitos de negócio
- A API disponibiliza uma lista de aplicativos.
- O cliente pode escolher comprar um aplicativo.
- O cliente pode se cadastrar ou fazer login (se já tiver cadastro).
- Os parâmetros de cadastro são: nome, cpf, data de nascimento, sexo, endereço completo.
- O pagamento do aplicativo deve ser feito somente com cartão de crédito.
- Cartão de crédito pode (opcional) ficar guardado para uso futuro.
- O sistema só salva cartões que são válidos
- Não precisa desenvolver a administração dos aplicativos.
Requisitos técnicos
- As compras/transações devem ser processadas de modo assincrono, colocadas num serviço de fila.
- Implementação de cache pra listagem dos aplicativos. (opcional).
- Deve existir um serviço que busca as transações de cartão de crédito para processar da fila (sugiro utilizar o padrão Observer)
- Tecnologias.
- http://asp.net/web-api (em REST)
- BD: SQL Server ou MongoDb
- Fila: RabbitMQ ou Kafka
- Serviço de consumer: Pode ser algo simples, como um console aplication em C# que lerá da fila e armazenará no banco de dados. (O pagamento pode ser aprovado de forma mockada)
Inicialmente foi criado uma solution e posteriormente adicionados os projetos na solution.
Entao, quando for feito o clone no projeto, todo o projeto estará dentro de uma pasta "AppSolution" que é justamente o nome da solution criada inicialmente.
Dados disponibilizados pelo projeto App.Api, onde é feito toda a coleta e busca dos dados em uma base SqlServer.
Cada requisição feita na api, é feito uma solicitação atraves de uma classe Service, que possui toda logica do negocio do projeto, onde é sempre referenciada por uma interface especifica.
O relacionamento entre as classe e suas interfaces, são feitas atraves do startup.cs do projeto.
Existem 3 Nomenclaturas disponivbeis no projeto.
Sevice: Responsavel pelas regras de negocio do projeto, onde é feito todas as validações dos dados imputados e logica do negocio, conversoes, etc..
Repository: Responsavel pela comunicação com repositorios de dados no banco de dados.
Adapters: Responsavel por toda comunicação a sistemas externos, no caso, utilizando uma chama em api.
App.ConsumerConsole
Responsavel por coletar as mensagens na fila de mensagens e processar os pedidos.
App.UI
Responsavel pela requisição dos dados via api e exibir os dados em tela.
App.api
Responsavel por receber as requisições dos aplicativos sendo elas, Get, Post, porem, não foram implementados metodos para receberem requisições do tipo put e delete, option.
App.Domain
Responsavel pela regra de negocio do projeto, onde toda as validações, mudança de status, e requisição das classe de persistencia no banco(repository) e comunicação externa(Adapters)
App.Adapters
Responsavel pela comunicação externa via api.
App.Repository
Responsavel pela comunicação comunicação entre sistema e banco de dados.
App.Test
Responsavel pelos testes da aplicação, porem, ainda nao foi finalizado.