/pick-pay-plataform

Desafio Back-end PicPay

Primary LanguageKotlin

Desafio Back-end PicPay

Setup do Projeto

  • Linguagem de programação: Kotlin
  • Tecnologia: Spring Boot 3.0.10
  • Gerenciador de dependência: Gradle Kotlin
  • Banco de dados: H2
  • Java 17
  • IDE IntelJ

Sobre o ambiente da aplicação:

  • Docker
  • Você pode testar a aplicação com o docker-compose
  • 1º passo: Na pasta docker, abrir o terminal git bash e execultar o comando
docker-compose up -d
{
  "data": {
    "senderId": 1,
    "receiverId": 2,
    "value": 50
  }
}
{
  "data": [
    {
      "id": 1,
      "name": "Marina Lima",
      "userType": "COMMON_PERSON",
      "accounting": {
        "balance": 100.00
      }
    },
    {
      "id": 2,
      "name": "Borde Mais",
      "userType": "MERCHANT_PERSON",
      "accounting": {
        "balance": 100.00
      }
    },
    {
      "id": 3,
      "name": "Wagner Lima",
      "userType": "COMMON_PERSON",
      "accounting": {
        "balance": 100.00
      }
    }
  ]
}
  • Ao finalizar os testes digite:
docker-compose down

Documentando da API REST Spring usando OpenAPI 3.0

O Design Pattern

  • Circuit Breaker (Disjuntor)
  • Este padrão de projeto ajuda a evitar a ocorrência de falhas em cascata e permite construir um serviço tolerante a falhas e resiliente, que consiga sobreviver quando os principais serviços que ele consome estiverem passando por instabilidade.

Arquitetura

  • Arquitetura hexagonal, com a divisão em camadas de acordo com suas responsabilidades e encapsulamento da lógica

Objetivo: PicPay Simplificado

Temos 2 tipos de usuários, os comuns e lojistas, ambos têm carteira com dinheiro e realizam transferências entre eles. Vamos nos atentar somente ao fluxo de transferência entre dois usuários.

Requisitos:

  • Para ambos tipos de usuário, precisamos do Nome Completo, CPF, e-mail e Senha. CPF/CNPJ e e-mails devem ser únicos no sistema. Sendo assim, seu sistema deve permitir apenas um cadastro com o mesmo CPF ou endereço de e-mail.

  • Usuários podem enviar dinheiro (efetuar transferência) para lojistas e entre usuários.

  • Lojistas só recebem transferências, não enviam dinheiro para ninguém.

  • Validar se o usuário tem saldo antes da transferência.

  • Antes de finalizar a transferência, deve-se consultar um serviço autorizador externo, use este mock para simular (https://run.mocky.io/v3/8fafdd68-a090-496f-8c9a-3442cf30dae6).

  • A operação de transferência deve ser uma transação (ou seja, revertida em qualquer caso de inconsistência) e o dinheiro deve voltar para a carteira do usuário que envia.

  • No recebimento de pagamento, o usuário ou lojista precisa receber notificação (envio de email, sms) enviada por um serviço de terceiro e eventualmente este serviço pode estar indisponível/instável. Use este mock para simular o envio (http://o4d9z.mocklab.io/notify).

  • Este serviço deve ser RESTFul.

Desenvolvido por:

  • Wagner de Lima Braga Silva