Skip to content

Instantly share code, notes, and snippets.

@guilhermebr
Last active May 29, 2024 17:41
Show Gist options
  • Save guilhermebr/fb0d5896d76634703d385a4c68b730d8 to your computer and use it in GitHub Desktop.
Save guilhermebr/fb0d5896d76634703d385a4c68b730d8 to your computer and use it in GitHub Desktop.
Desafio Técnico de Go da Stone Banking

Desafio Técnico - Go(lang)

O desafio é criar uma API de transferencia entre contas Internas de um banco digital.

=====================

API

Regras gerais

  • Usar formato JSON para leitura e escrita. (ex: GET /accounts/ retorna json, POST /accounts/ {name: 'james bond'})

Rotas esperadas

/accounts

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 contas
  • GET /accounts/{account_id}/balance - obtém o saldo da conta
  • POST /accounts - cria uma Account

Regras para esta rota

  • balance pode iniciar com 0 ou algum valor para simplificar
  • secret deve ser armazenado como hash

/login

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

/transfers

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 uma Account 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

=====================

Requisitos Técnicos

  • 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

Critérios de Avaliação

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

Entrega

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

Boas Práticas

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

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?
  • O código possui testes?

Material de Estudo

Go

Rest

Boas praticas

Outros

Comunidade Go

Sugestões

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