Skip to content

Instantly share code, notes, and snippets.

@bamorim
Last active June 5, 2019 00:25
Show Gist options
  • Save bamorim/39f7ec5ba2c5beff6ff0227a4e6308ca to your computer and use it in GitHub Desktop.
Save bamorim/39f7ec5ba2c5beff6ff0227a4e6308ca to your computer and use it in GitHub Desktop.

API de Banking

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.

Requisitos Técnicos

  • O desafio deve ser feito na linguagem Elixir.
  • A API pode ser JSON ou GraphQL
  • Docker é um diferencial.
  • EventSourcing é um diferencial.

Critérios de Avaliação

O desafio será avaliado através de cinco critérios.

Entrega

  • 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?

Boas Práticas

  • 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?

Documentação

  • 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?

Código Limpo

  • O código possibilita expansão para novas funcionalidades?
  • O código é Don't Repeat Yourself?
  • O código é fácil de compreender?

Controle de Qualidade

  • 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?

Material de Estudo

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment