Desafio técnico para criação de uma API de um banco utlizando Elixir.
Uma API REST impleementada utilizando Elixir e o framwork Phoenix que simula um sistema bancario simples. Além disso, essa é uma aplicação 'dockerizada' juntamente com um banco de dados Postgres em um docker-compose.
- Login com JWT
- Cadastro de Clientes
- Operações bancarias:
- Saque de conta.
- Depositos em conta.
- Transferências entre contas.
- Relátorio de Transaçẽs por dia, mês, ano e total.
A documentação da API pode ser encontrada aqui.
Essa é uma aplicação Elixir, preparada para gerar uma release para entregar código em produção. Esse mesmo pacote pode ser colocado em um docker container e ser "deployado" como unidade. Além disso, permite que a execução de uma unidade mais abrangente, o docker-compose.
Abaixo duas formas execução da aplicação:
Para executar dessa forma é necessário um postgres rodando e configurado nas os arquivos de configuração da aplicação, que são os mesmo de qualquer aplicação Phoenix.
mix ecto.setup
mix phx.server
Presumindo que já tenha o Docker e Docker Compose instalado, execute o comando abaixo.
docker-compose up
Nessa abordagem uma release será construida, dockerizada e executada em um ambiente configurado com banco de dados preparado para conexão.
Em ambas as abordagem um usuário admin com password adminAdmin é criado e ficará pronto para uso segundo a especificação da API.
- users: Utiliza para acesso no sistema
- clients: Clientes cadastrados no sistema, que podem possuir uma ou mais accounts.
- accounts: Representa as contas de um cliente, que por sua vez pode ter diversas operations associadas.
- operations: Representa as operações realizadas em uma account, que por sua vez pode ter diversas operações associadas. O campo type representa o tipo de operação e tem o seguinte domínio:
- SAQUE : Retirada de dinheiro da conta.
- TRANSFERENCIA : Movimentação de recursos de uma conta para outra.
- CREDITO : Entrada de dinheiro na conta, que pode ser oriundo de uma TRANSFERENCIA, é referenciada pelo campo origin_operation_id.
Testes podem ser executados com o seguinte comando:
mix test
Pode-se ver a cobertura dos testes utilizando o seguinte commando:
mix converalls
Veja as Issues do repositório.
