Git Product home page Git Product logo

nano-digital-wallet's Introduction

Nano Digital Wallet

Um sistema simples para efeturar transferências entre usuários.

Documentação

O projeto foi dividido numa arquitetura hexagonal (também conhecido como ports and adapters).

  • Application: Serviços de uso de casos. Geralmente são chamodos por entry points do sistema como controller e commands.
  • Domain: Fica com as entidades do sistema. Ex.: Models, Values Object.
  • Infra: Controllers, Framework, Implementação de portas abstratas do Domain.

Models

  • Transference
  • Wallet
  • User

Fluxo

  1. AuthorizeTransference.php - Faz as validações internas e verifica o autorizador externo.
  2. ExecuteTransferenceProcess.php - Persiste a transferência e modifica as carteiras dos usuários.
  3. NotifyTransferencePayee.php - Envia a notificação para o beneficiado da transferência em caso de sucesso.

Configuração

Clone o repositório

$ git clone [email protected]:moacirjun/nano-digital-wallet.git

Monte a imagem do php-fpm com o seu userId:

$ cd nano-digital-wallet && docker-compose build --build-arg USER_ID=${UID} --build-arg GROUP_ID=${GID} php-fpm
$ docker-compose up -d

Crie seu .env.local:

$ cp .env .env.local

Instalar as dependências, carregar banco de dados e Fixtures.

$ docker exec -it digital_wallet_php composer sync

Testes unitários.

$ docker exec -it digital_wallet_php vendor/bin/codecept run Unit

Gere as chaves SSL:

$ docker exec -it digital_wallet_php bin/console lexik:jwt:generate-keypair

Gere um Token JWT para o usuário Mike (Para mais usuários veja o arquivo AppFixtures.php):

$ curl --location --request POST 'localhost/api/login_check' \
  --header 'Content-Type: application/json' \
  --data-raw '{
      "username":"[email protected]",
      "password":"123"
  }'
{
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE2MTY0OTE4MjksImV4cCI6MTYxNjQ5..."
}

Faça sua primeira tranferência:

$ curl --location --request POST 'localhost/api/transferences' \
  --header 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE2MTY0OTE...' \
  --header 'Content-Type: application/json' \
  --data-raw '{
      "payee": 2,
      "amount": 5
  }'
{"transference":"3908ef07-fe21-4fed-a016-091b72de275a"}

Proposta de melhoria

Configurar o Symfony/Messenger para manipular as mensagens de forma assíncrona utilizando o RabbitMQ como driver. Dessa forma, seria possível gerenciar tópicos e filas a nível de configuração, e sem falar na possibilidade de definir filas específicas para reprocessamento de falhas.

nano-digital-wallet's People

Contributors

moacirjun avatar

Stargazers

Hugo Bandeira avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.