Skip to content

Desafio cujo objetivo é disponibilizar uma API que permita realizar transferência de dinheiro entre 2 usuários seguindo as regras propostas.

Notifications You must be signed in to change notification settings

dehsilvadeveloper/laravel10-pagamento-simplificado

Repository files navigation

Laravel PHP MySQL JWT Composer Docker Git Redis Markdown Env

Desafio Pagamento Simplificado (Versão Laravel 10)

Descrição do desafio

O objetivo deste desafio é construir uma API RESTFul para efetuar pagamentos simples. Nela deve ser possível realizar transferências de dinheiro entre usuários. Temos 2 tipos de usuários: os comuns e os lojistas, sendo que ambos possuem carteira com dinheiro e realizam transferências entre eles.

Requisitos

A API desenvolvida deve respeitar as regras de negócio a seguir:

  • Este serviço deve ser RESTFul;

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

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

  • 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 https://util.devi.tools/api/v2/authorize para simular o serviço utilizando o verbo GET. Ele retornará uma resposta no seguinte formato:

{"status" : "success", "data" : { "authorization" : true }}

A resposta retornada pelo mock é randômica, então também vai acontecer de serem retornadas respostas negativas.

{"status" : "fail", "data" : { "authorization" : false }}

Lembre-se considerar as possíveis respostas que podem ser recebidas do mock no desenvolvimento da API;

  • 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 (independente do tipo);

  • No recebimento de pagamento, o usuário comum ou lojista precisa receber uma notificação (envio de email, sms, etc) enviada por um serviço de terceiro e eventualmente este serviço pode estar indisponível/instável. Use este mock https://util.devi.tools/api/v1/notify para simular o envio da notificação utilizando o verbo POST. Ele retornará uma resposta no seguinte formato:

{"status" : "success", "data" : { "sent" : true }}

A resposta retornada pelo mock é randômica, então também vai acontecer de serem retornadas respostas negativas.

{"status" : "fail", "data" : { "sent" : false }}

Lembre-se considerar as possíveis respostas que podem ser recebidas do mock no desenvolvimento da API.

Endpoint de transferência

A implementação do endpoint de transferência deve seguir o contrato seguir:

POST /transfer
Content-Type: application/json

{
  "value": 100.0,
  "payer": 4,
  "payee": 15
}

Avaliação

Você pode implementar o que achar conveniente para o funcionamento do sistema, porém a avaliação do resultado do desafio vai considerar apenas o fluxo de transferência entre 2 usuários. O fluxo de gerenciamento de usuários e autenticação da API não são requisitos para conclusão do desafio, mas são bem-vindos se implementados.

Lembre-se de respeitar as regras de negócio do desafio.

Desenvolvido com

Nome Versão
Laravel v10.x +
PHP v8.2.x +
Docker v20.10.x +
Docker Compose v3.8.x +
MySQL v8.0.x
Redis v6.2.x

Documentação

About

Desafio cujo objetivo é disponibilizar uma API que permita realizar transferência de dinheiro entre 2 usuários seguindo as regras propostas.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages