O desafio é criar uma API de transferencia entre contas Internas de um banco digital.
=====================
- Usar formato JSON para leitura e escrita. (ex:
GET /accounts/
retorna json,POST /accounts/ {name: 'james bond'}
)
A entidade Account
possui os seguintes atributos:
id
name
cpf
secret
balance
created_at
Espera-se as seguintes ações:
GET /accounts
- obtém a lista de contasGET /accounts/{account_id}/balance
- obtém o saldo da contaPOST /accounts
- cria umaAccount
Regras para esta rota
balance
pode iniciar com 0 ou algum valor para simplificarsecret
deve ser armazenado como hash
A entidade Login
possui os seguintes atributos:
cpf
secret
Espera-se as seguintes ações:
POST /login
- autentica a usuaria
Regras para esta rota
- Deve retornar token para ser usado nas rotas autenticadas
A entidade Transfer
possui os seguintes atributos:
id
account_origin_id
account_destination_id
amount
created_at
Espera-se as seguintes ações:
GET /transfers
- obtém a lista de transferencias da usuaria autenticada.POST /transfers
- faz transferencia de umaAccount
para outra.
Regras para esta rota
- Quem fizer a transferência precisa estar autenticada.
- O
account_origin_id
deve ser obtido no Token enviado. - Caso
Account
de origem não tenha saldo, retornar um código de erro apropriado - Atualizar o
balance
das contas
Ponto de Atenção
=====================
- O código do desafio estar na linguagem Go
- Pode-se utilizar qualquer package ou framework, mas lembre-se: stdlib > packages > frameworks (usar standard library do Go é melhor que usar packages, que é melhor que usar frameworks...)
- Utilização de Docker é obrigatório
Indicação de material de estudo no final
O desafio será avaliado através de quatro critérios.
- 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 código possui algum controle de dependências?
- O código está de acordo com o guia de estilo do Go?
- 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 testes?
- Lets'Go - WWG Curitiba + Stone para Iniciantes
- Effective Go
- Aprenda Go com Testes
- Curso Aprenda Go (@ellenkorbes)
- Learn Go
- Gophercise
- Build Web Application with Golang
- Error Handling
- DDD Lite in Go
- Repository Pattern in Go