O sistema deve oferecer a possibilidade de usuários realizarem transações financeiras como saque e transferencia entre contas.
Um usuário pode se cadastrar e ao completar o cadastro ele recebe R$ 1000,00.
Com isso ele pode transferir dinheiro para outras contas e pode sacar dinheiro. O saque do dinheiro simplesmente manda um email para o usuário informando sobre o saque e reduz o seu saldo (o envio de email não precisa acontecer de fato, pode ser apenas logado e colocado como "placeholder" para envio de email de fato).
Nenhuma conta pode ficar com saldo negativo.
É necessário autenticação para realizar qualquer operação.
É preciso gerar um relatório no backoffice que dê o total transacionado (R$) por dia, mês, ano e total.
- O desafio deve ser feito na linguagem Elixir.
- A API pode ser JSON ou GraphQL
- Docker é um diferencial.
- EventSourcing é um diferencial.
O desafio será avaliado através de cinco critérios.
- O código possui algum controle de dependências?
- O resultado final está completo para ser executado?
- O resultado final atende ao que se propõe fazer?
- O resultado final atende totalmente aos requisitos propostos?
- O sistema está rodando em algum lugar público?
- Existe monitoramento de logs e falhas no sistema?
- O código está de acordo com o guia de estilo do Elixir?
- O código está bem estruturado?
- O código está fluente na linguagem?
- O código faz o uso correto de Design Patterns?
- O código foi entregue com um arquivo de README claro de como se guiar?
- O código possui comentários pertinentes?
- O código está em algum controle de versão?
- Os commits são pequenos e consistentes?
- As mensagens de commit são claras?
- O código possibilita expansão para novas funcionalidades?
- O código é Don't Repeat Yourself?
- O código é fácil de compreender?
- O código possui configuração de lint?
- O código possui testes unitários?
- O código possui teste de cobertura?
- Integração Contínua?