🤑 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.
- Cadastro de uma nova transferência
- Consulta de uma transferência
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.
Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas:
- Git
- Elixir
- Node.js
- PostgreSQL, podendo ser usado um container docker.
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
# 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
# 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
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 statusrejected
.
Response
{
"id": "23ac079b-f210-4d97-9d64-a2826c8188e7",
"status": "created"
}
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"
}
As seguintes ferramentas foram usadas na construção do projeto:
Anderson Santos 🚀
Feito com ❤️ por Anderson Santos