Skip to content

Microserviço para transferência de dinheiro construído com Elixir 💚

Notifications You must be signed in to change notification settings

zander-br/transferex

Repository files navigation

🤑 Transferex

Microserviço para transferência de dinheiro construído com Elixir 💚

Codecov

Tabela de conteúdos

💻 Sobre o projeto

🤑 Transferex - É um microserviço desenvolvido 100% em Elixir que tem como objetivo realizar operações de transferências ao qual integra-se com um serviço de Liquidação para a efetivação da transação. O protocolo de comunicação utilizado para as operações e comunicação é o HTTP, mais por sua vez internamente é utilizado sistema de filas, gerando com isso uma comunicação assíncrona.

⚙️ Funcionalidades

  • Cadastro de uma nova transferência
  • Consulta de uma transferência

🚀 Como executar o projeto

Este projeto, possui a dependência do microserviço de Liquidação ao qual é necessário estar sendo executado no endereço http://localhost:3333

💡 Para auxiliar-lhe nesse processo também criamos um projeto mock para o microserviço de Liquidação.

Pré-requisitos

Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas:

🎲 Rodando o banco de dados

Com o Docker instalado na máquina basta executar o comando abaixo para criar uma instância do PostgreSQL na sua máquina via container

docker run --name postgres -e POSTGRES_PASSWORD=postgres -p 5432:5432 -d postgres

🧭 Rodando o microserviço mock de liquidação

# Acesse página do projeto
$ cd mock

# Instale as dependências
$ npm install

# Execute a aplicação em modo de desenvolvimento
$ npm run start

# A aplicação será aberta na porta:3333 - acesse http://localhost:3333

🤑 Rodando o microserviço de transferência

# Instale as dependências e cria o banco de dados
$ mix setup

# Execute as Migrations
$ mix ecto.setup

# Execute os testes
$ mix test

# Execute o projeto
$ mix phx.server

# A aplicação será aberta na porta:4000 - acesse http://localhost:4000

🔌 Documentação API

POST - Criação de uma transferência

http://localhost:4000/api/transfers

Payload

{
  "amount": 12.25,
  "originAccountId": "b007861e-806d-4580-b705-ac8eff473e2c",
  "destinationAccountId": "a0868a72-8278-44ee-9125-b4035cdb2e09",
  "due_date": "2022-12-31"
}

O campo due_date é opcional, e caso não seja informado no momento da transfência a mesma será liquidada imediatamente, porém caso seja informado e essa se refira a uma data futura a transferência será enviada para a API de liquidação apenas na data do vencimento as 10h da manhã, caso a data de vencimento já tenha passada, o serviço registra a transferência para consultas futuras mais com o status rejected.

Response

{
  "id": "23ac079b-f210-4d97-9d64-a2826c8188e7",
  "status": "created"
}

GET - Consulta de uma transferência

http://localhost:4000/api/transfers/:id

Response

{
  "amount": "12.25",
  "destinationAccount": "a0868a72-8278-44ee-9125-b4035cdb2e09",
  "dueDate": null,
  "id": "23ac079b-f210-4d97-9d64-a2826c8188e7",
  "liquidationDate": "2022-02-06T16:39:40",
  "liquidationId": "eedcfef2-9036-43bb-a95a-bc3ce504e63a",
  "originAccount": "b007861e-806d-4580-b705-ac8eff473e2c",
  "status": "approved",
  "transferDate": "2022-02-06T16:39:22"
}

Run in Insomnia

🛠 Tecnologias

As seguintes ferramentas foram usadas na construção do projeto:

🦸 Autor


Anderson Santos
🚀

Linkedin Badge

Feito com ❤️ por Anderson Santos