Skip to content

Instantly share code, notes, and snippets.

@willsantos
Last active November 1, 2023 19:11
Show Gist options
  • Save willsantos/dbee92f8b56b0dc77f00524d33d60514 to your computer and use it in GitHub Desktop.
Save willsantos/dbee92f8b56b0dc77f00524d33d60514 to your computer and use it in GitHub Desktop.
Task hexagon

Resumo do escopo do projeto

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 propriedades diasPesquisa, pagador, recebedor e valor.
  • Criar o modelo de domínio Pagador com as propriedades cnpj e chavePix.
  • Criar o modelo de domínio Recebedor com as propriedades cpf e chavePix.
  • Criar a interface IPagamentoService com os métodos Pagar(Pagamento pagamento) e VerificarPagamento(Pagamento pagamento).
  • Criar a classe concreta PagamentoService que implementa a interface IPagamentoService e contém a lógica de negócio para realizar e verificar os pagamentos.
  • Criar a interface IPagamentoRepository com os métodos SalvarPagamento(Pagamento pagamento) e BuscarPagamento(Pagamento pagamento).
  • Criar três classes concretas que implementam a interface IPagamentoRepository: PagamentoRepositoryMysql, PagamentoRepositorySqlServer e PagamentoRepositoryMongoDb. 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étodo Execute(TRequest request) que recebe um objeto de requisição e retorna um objeto de resposta.
  • Criar os casos de uso CriarPagamentoUseCase e VerificarPagamentoUseCase que implementam a interface IUseCase<TRequest, TResponse> e usam o serviço IPagamentoService e o repositório IPagamentoRepository.
  • 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 uso CriarPagamentoUseCase para realizar e verificar o pagamento, e retornar um objeto CriarPagamentoResponse como resultado.
  • Configurar a injeção de dependência para registrar o serviço IPagamentoService, o repositório IPagamentoRepository e os casos de uso CriarPagamentoUseCase e VerificarPagamentoUseCase de acordo com o banco de dados escolhido.
  • Documentar a API usando o Swagger ou outra ferramenta de sua preferência.

Explicações sobre o useCase

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment