Desafio técnico Toro Investimentos (1.0.0)

Download OpenAPI specification:Download

Este é um projeto de amostra de habilidades técnicas desenvolvido por Roberto D'Alessandro Guimarães.
A solicitação do recrutador pode ser conferida aqui.


Solicitar acesso
.

Introdução

Proposta

Serão abordadas nessa api as seguintes user stories:

  • TORO-001: Login do usuário;
  • TORO-002: Consultar saldo;
  • TORO-003: Transações (PIX/TED);
  • TORO-004: Top 7 trade.

Estrutura

Pendências

  • Implementar Lambda Authorizer e sua base de dados
  • Autenticação para accounts, caso eu não faça o lambda auth
  • Definir à quem pertence o SNS (users ou accouts/auth)
  • Implementar SNS para distribuir o usuário
  • Implementar lógica para "/userPosition" (retorno atualmente "mockado")

Authentication

Bearer Auth

O token é adiquirido usando a rota "GET /login"

Security Scheme Type HTTP
HTTP Authorization Scheme bearer
Bearer format "JWT"

Usuário

Desafio concluído

User story: "Eu, como investidor, gostaria de acessar a plataforma Toro usando minhas credenciais de usuário e senha, para que eu possa aprender mais, investir mais e acompanhar meus investimentos."

Essa sessão contêm o path para efetuar o login do usuário, as demais rotas são para que o recrutador possa incluir, editar ou excluir usuários para testar o ligin

Não foi implementada uma lógica de permissão de acesso, devido ao prazo definido e ao fato de o projeto ser uma amostra técnica.

Fazer login

Essa rota é de fato o objeto de estudo para o desafio, pois ela valida as credenciais informadas pelo recrutador e, caso sejam válidas, retorna um bearer token que será utilizado nas demais rotas para que se possa fazer as requisições.

Observações:

  • Essa é a primeira rota a ser usada na avaliação técnica
  • Use o token retornado como "bearer token" nas demais requisições
  • As demais rotas desse microsservice são apenas para facilitar a interação do recrutador.
    A nível de arquitetura elas não pertencem a esse projeto.
query Parameters
account
required
string

Esse atributo representa a conta do usuário e deve ser enviado via querystring

password
required
string

Esse atributo representa a senha do usuário e deve ser enviado via querystring

Responses

Response samples

Content type
application/json
{
  • "Bearer": "16251d7990.1g670..."
}

Listar usuários

Essa rota é responsável por listar os usuários.

Authorizations:
query Parameters
limit
number

Envie esse parâmetro para limitar a quantidade de usuários retornados

next
string

Envie esse parâmetro para retornar usuários a partir do valor informado.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Criar usuário

Essa rota tem como finalidade a listagem de usuários criados pelo usuário.

Authorizations:
Request Body schema: application/json
Array ()
name
required
string non-empty

Nome do usuário

cpf
required
string 14 characters

CPF do usuário

email
required
string non-empty

E-mail do usuário

required
Array of objects

Responses

Request samples

Content type
application/json
[
  • {
    }
]

Buscar usuário

Essa rota tem como finalidade retornar um usuário informando o seu número de conta.

Authorizations:
path Parameters
account
required
string

Número da conta do usuário que deseja buscar

Responses

Response samples

Content type
application/json
{
  • "account": 1625179901670,
  • "name": "Fulano de Tal",
  • "cpf": "123.456.789-10",
  • "email": "fulano@tal.com",
  • "phones": [
    ]
}

Editar usuário

Essa rota tem como finalidade a edição de um usuário.

Authorizations:
path Parameters
account
required
string

Número da conta do usuário que deseja editar.

Request Body schema: application/json
Array ()
name
string non-empty

Nome do usuário

cpf
string 14 characters

CPF do usuário

email
string non-empty

E-mail do usuário

Array of objects

Responses

Request samples

Content type
application/json
[
  • {
    }
]

Deletar um usuário

Essa rota tem como finalidade exclusão de um usuário.

Authorizations:
path Parameters
account
required
string

Número da conta do usuário que deseja deletar.

Responses

Contas

Desafio em desenvolvimento

User story: "Eu, como investidor, gostaria de visualizar meu saldo, meus investimentos e meu patrimônio total na Toro."

O patrimônio do usuário deve conter as seguintes informações:

  • Saldo atualmente em conta corrente
  • Lista de ativos (ações) pertencentes ao usuário, com quantidade de cada ativo e valor individual atual de cada um. (Ex: 10 ações PETR4, valor individual R$25,00)
  • Patrimônio sumarizado (Saldo + Valor totalizado dos ativos)

Buscar patrimônio

Essa rota é responsável por buscar o patrimônio do cliente Toro.
Será usado o token para buscar o patrimonio através do número da conta contido no token.

Authorizations:

Responses

Response samples

Content type
application/json
{
  • "checkingAccountAmount": 234.17,
  • "consolidated": 413.19,
  • "positions": [
    ]
}

Transações

Não iniciado

User story: Eu, como investidor, gostaria de poder depositar um valor na minha conta Toro, através de PiX ou TED bancária, para que eu possa realizar investimentos.

Restrições:

  • A Toro já participa do Sistema Brasileiro de Pagamentos (SPB) do Banco Central, e está integrado a ele. Isto significa que a Toro tem um número de banco (352), cada cliente tem um número único de conta na Toro, e que toda transferência entre bancos passa pelo SBP do Banco Central, e quando a transferência é identificada como tendo o destino o banco Toro (352), uma requisição HTTP é enviada pelo Banco Central notificando tal evento. O formato desta notificação segue o padrão REST + JSON a seguir (hipotético para efeito de simplificação do desafio):
  •     
          {
            "event": "TRANSFER",
            "target": {
                "bank": "352", // Banco Toro
                "branch": "0001", // Única agenda, sempre 0001
                "account": "300123", // Conta do usuário na Toro (unica por usuário)
            },
            "origin": {
                "bank": "033", // Banco de origem 
                "branch": "03312", // Agencia de origem
                "cpf": "45358996060" // CPF do remetente
            },
            "amount": 1000, // R$ 1000,00 reais
          }
        
      
  • Outra restrição é que a origem da transferência deve sempre ser do mesmo CPF do usuário na Toro.

Top 5 da semana

Não iniciado

User story: "Eu, como investidor, gostaria de ter acesso a uma lista de 5 ações mais negociadas nos últimos 7 dias, com seus respectivos preços, para que eu possa escolher uma delas e comprar a quantidade que eu escolher, respeitando o limite de saldo disponível na minha conta Toro, para que assim eu consiga possa montar minha carteira de investimentos."

Observação:

  • Para efeito de simplificação do desafio, as 5 ações mais negociadas nos últimos 7 dias e seus respectivos preços não precisam ser "reais", podem ser definidas utilizando algum recurso pre-definido no backend (uma coleção predefinida no banco de dados ou arquivo JSON).