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
Pagamento
com as propriedadesdiasPesquisa
,pagador
,recebedor
evalor
. - Criar o modelo de domínio
Pagador
com as propriedadescnpj
echavePix
. - Criar o modelo de domínio
Recebedor
com as propriedadescpf
echavePix
. - Criar a interface
IPagamentoService
com os métodosPagar(Pagamento pagamento)
eVerificarPagamento(Pagamento pagamento)
. - Criar a classe concreta
PagamentoService
que implementa a interfaceIPagamentoService
e contém a lógica de negócio para realizar e verificar os pagamentos. - Criar a interface
IPagamentoRepository
com os métodosSalvarPagamento(Pagamento pagamento)
eBuscarPagamento(Pagamento pagamento)
. - Criar três classes concretas que implementam a interface
IPagamentoRepository
:PagamentoRepositoryMysql
,PagamentoRepositorySqlServer
ePagamentoRepositoryMongoDb
. 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
CriarPagamentoUseCase
eVerificarPagamentoUseCase
que implementam a interfaceIUseCase<TRequest, TResponse>
e usam o serviçoIPagamentoService
e o repositórioIPagamentoRepository
. - Criar as classes de requisição e resposta para cada caso de uso, como
CriarPagamentoRequest
,CriarPagamentoResponse
, etc. - Criar o endpoint
/api/pagamentos
que recebe uma requisição POST com o corpo no formato JSON especificado. O endpoint deve usar o caso de usoCriarPagamentoUseCase
para realizar e verificar o pagamento, e retornar um objetoCriarPagamentoResponse
como resultado. - Configurar a injeção de dependência para registrar o serviço
IPagamentoService
, o repositórioIPagamentoRepository
e os casos de usoCriarPagamentoUseCase
eVerificarPagamentoUseCase
de 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.