O objetivo do projeto é criar uma API que permita que as empresas paguem seus funcionários usando o Pix, e que verifique se o pagamento já foi feito nos últimos 30 dias. A API deve receber uma requisição POST com o corpo no formato JSON especificado, e retornar uma resposta adequada. A API deve usar a arquitetura hexagonal e ter três adapters para diferentes bancos de dados: Mysql, SqlServer e MongoDb. A API deve ser documentada usando o Swagger ou outra ferramenta de sua preferência.
- Criar o modelo de domínio
Pagamentocom as propriedadesdiasPesquisa,pagador,recebedorevalor. - Criar o modelo de domínio
Pagadorcom as propriedadescnpjechavePix. - Criar o modelo de domínio
Recebedorcom as propriedadescpfechavePix. - Criar a interface
IPagamentoServicecom os métodosPagar(Pagamento pagamento)eVerificarPagamento(Pagamento pagamento). - Criar a classe concreta
PagamentoServiceque implementa a interfaceIPagamentoServicee contém a lógica de negócio para realizar e verificar os pagamentos. - Criar a interface
IPagamentoRepositorycom os métodosSalvarPagamento(Pagamento pagamento)eBuscarPagamento(Pagamento pagamento). - Criar três classes concretas que implementam a interface
IPagamentoRepository:PagamentoRepositoryMysql,PagamentoRepositorySqlServerePagamentoRepositoryMongoDb. Cada uma delas deve usar o banco de dados correspondente para persistir e consultar os dados dos pagamentos. - Criar a interface
IUseCase<TRequest, TResponse>que define um métodoExecute(TRequest request)que recebe um objeto de requisição e retorna um objeto de resposta. - Criar os casos de uso
CriarPagamentoUseCaseeVerificarPagamentoUseCaseque implementam a interfaceIUseCase<TRequest, TResponse>e usam o serviçoIPagamentoServicee o repositórioIPagamentoRepository. - Criar as classes de requisição e resposta para cada caso de uso, como
CriarPagamentoRequest,CriarPagamentoResponse, etc. - Criar o endpoint
/api/pagamentosque recebe uma requisição POST com o corpo no formato JSON especificado. O endpoint deve usar o caso de usoCriarPagamentoUseCasepara realizar e verificar o pagamento, e retornar um objetoCriarPagamentoResponsecomo resultado. - Configurar a injeção de dependência para registrar o serviço
IPagamentoService, o repositórioIPagamentoRepositorye os casos de usoCriarPagamentoUseCaseeVerificarPagamentoUseCasede acordo com o banco de dados escolhido. - Documentar a API usando o Swagger ou outra ferramenta de sua preferência.
O useCase é uma forma de organizar a lógica da aplicação em classes que representam as ações que os usuários podem realizar. Cada useCase é responsável por executar uma tarefa específica, como criar ou verificar um pagamento. O useCase recebe um objeto de requisição que contém os dados necessários para a execução, e retorna um objeto de resposta que contém os dados resultantes da execução.
A vantagem de usar o useCase é que ele permite separar melhor as responsabilidades da aplicação, facilitando o teste, a manutenção e a extensão do código. Além disso, o useCase pode ser usado por diferentes camadas da aplicação, como a apresentação, a infraestrutura ou o domínio, sem depender de detalhes específicos de cada uma delas.