gabrielnerys / stockmarket-API

Repositório destinado ao envio de Projeto referente ao Desafio Técnico do processo seletivo da XP inc

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

StockMarketAPI

Índice

Overview

Sobre a API

A StockMarketAPI é uma API REST que simula compra e venda de ativos para plataformas de Investimentos em ações.

Link para Documentação Swagger

Para testar a simulação da API e visualizar a Documentação Swagger clique no link abaixo:

➡️ StockMarketAPI

Siga esse passos:

  • Acesse a rota "/login", clique em "Try it out" e depois em "Execute"
  • Após isso, você receberá uma resposta como mostrado no exemplo abaixo:
  {
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJub21lIjoiUm9iZXJ0byIsInNvYnJlbm9tZSI6IlNvdXNhIiwiZW1haWwiOiJyb2JlcnRvc291c2FAZ21haWwuY29tIiwiaWF0IjoxNjU4NTIxNTYwLCJleHAiOjE2NTkxMjYzNjB9.0tdUYr5wbV6Oo3jUGCmDGd-EO4ZYCGE1tH9d_-vjTEk"
  }
  • Selecione todo o código dentro de aspas e copie(sem as aspas), como no exemplo abaixo:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJub21lIjoiUm9iZXJ0byIsInNvYnJlbm9tZSI6IlNvdXNhIiwiZW1haWwiOiJyb2JlcnRvc291c2FAZ21haWwuY29tIiwiaWF0IjoxNjU4NTIxNTYwLCJleHAiOjE2NTkxMjYzNjB9.0tdUYr5wbV6Oo3jUGCmDGd-EO4ZYCGE1tH9d_-vjTEk
  • Em seguida, clique no botão "Authorize" localizado no lado direito da parte superior da página
  • Cole o código copiado dentro da janela com o nome "Value" e clique em "Authorize"
  • Pronto, agora está tudo certo para testar as outras rotas!

Rotas

Alguns dos Recursos disponíveis pela API são:

  • Login
    • Realizar a validação das informações enviadas na requisição com as informações existentes no banco de dados.
    • Retorna um erro, caso as informações estejam inválidas ou não conferir com as informações no banco de dados.
    • Caso as informações estejam corretas, o usuário receberá um token que deverá ser armazenado para acesso a outras rotas.
  • Conta
    • Obter informações sobre a conta do usuário realizando uma busca atráves do código do cliente.
    • Realizar requisições de saques e depósitos recebendo o valor do saldo atualizado.
  • Ativos
    • Obter informações sobre todos os ativos disponíveis na plataforma
    • Obter informações sobre um unico ativo realizando uma busca atráves do código do ativo.
    • Obter informações todos os ativos que o cliente possui realizando uma busca atráves do código do cliente.
  • Investimentos
    • Realizar requisições de compra de ativos.
    • Realizar requisições de venda de ativos.
  • Transações
    • Obter informações sobre todos os registros de compra e venda de ativos na plataforma.

Sobre o Desafio

Etapas de Desenvolvimento

Modelagem do Banco de dados

Como primeiro passo para o desenvolvimento da API, escolhi o desenvolvimento do banco de dados pois assim eu teria uma melhor noção de como realizar a construção das queries para requisição das informações.

Optei por manter a aplicação simples, definindo 4 tabelas:

  • Clientes: Contém informações básicas dos clientes como nome, email, senha e saldo.
  • Ativos: Contém informações básicas sobre os ativos como nome, código e valor unitário.
  • Compra: Registra todas as informações de compra de ativos.
  • Venda: Registra todas as informações de venda de ativos.

Representação visual do banco de dados com respectivas relações:

Representação do banco de dados

Definição da Estrutura de pastas e Arquivos

Para o desenvolvimento da API, a forma escolhida foi seguindo a Estrutura MSC para a organização dos arquivos entre os respectivos diretórios de camadas, como representado abaixo:

  • src
    • controllers
      • assets.controller.js
      • clients.controller.js
      • transactions.controller.js
    • service
      • assets.service.js
      • clients.service.js
      • transactions.service.js
    • model
      • assets.model.js
      • clients.model.js
      • transactions.model.js

Ferramentas e linguagens

A linguagem escolhida para o desenvolvimento do projeto foi o Javascript, por eu possuir um conhecimento melhor e mais experiência no desenvolvimento de projetos.

Em conjunto com o JS, outras ferramentas e bibliotecas foram escolhidas no desenvolvimento como o uso do Express, por possuir recursos que facilitam o tratamento de requisições.

Para desenvolvimento e manipulação do banco de dados, foi utilizado o MySQL e o mesmo foi armazenado em nuvem através do serviço RDS disponível pela AWS.

Para deploy da API, está sendo utilizada a plataforma Heroku, onde estão definidas todas as varáveis de ambientes configuradas para o projeto funcionar corretamente.

A validação do acesso local é feita através da geração e autenticação de token utilizando JsonWebToken(JWT).

A documentação e testes de requisições da API foi feita através do Swagger.

Testes locais foram realizados utilizando o Postman.

Outros recursos utilizados foram:

  • CORS
  • dotEnv
  • Eslint

Desafios durante o desenvolvimento

Deploy do banco de dados

Durante o desenvolvimento do projeto foram realizados alguns testes em plataformas diferentes, dentre elas Heroku(através de Add-ons), Azure, Supabase, e a AWS que suportou corretamente o banco de dados por possuir suporte flexivel a variados tipos de bancos de dados.

Desenvolvimento da documentação Swagger

Por ser uma ferramenta que a pouco ainda era desconhecida, foi um desafio aprender a desenvolver a documentação, colocá-la no ar e entender quaisquer possíveis problemas de execução ou configuração.

Desenvolvimento continuo

Criação de novas rotas e funções

A inclusão de rotas com funções como Inclusão de novos clientes, update de informações como a substituição do email e/ou senha para ampliação de funcionalidades da API.

Refatoração da documentação Swagger

Visando uma melhor visualização do código, uma das tasks de melhoria é a refatoração da documentação Swagger em um arquivo próprio

Instruções de Compilação

  1. Clone o repositório
  • Execute o código abaixo no terminal
    git clone git@github.com:gabrielnerys/stockmarket-API.git
    
  • Entre na pasta do repositório que você acabou de clonar:
    cd stockmarket-API
    
  1. Instale as dependências
    npm install
    

Etapas opcionais:

  1. Crie uma branch a partir da branch main
  • Verifique que você está na branch main
    • Exemplo: git branch
  • Se não estiver, mude para a branch main
    • Exemplo: git checkout main
  • Agora crie uma branch à qual você vai submeter os commits do seu projeto
    • Você deve criar uma branch no seguinte formato: pessoa-desenvolvedora-projeto-x
    • Exemplo: git checkout -b pessoa-desenvolvedora-projeto-x
  1. Adicione as mudanças ao stage do Git e faça um commit
  • Verifique que as mudanças ainda não estão no stage
    • Exemplo: git status (deve aparecer listada a pasta em vermelho)
  • Adicione o novo arquivo ao stage do Git
    • Exemplo:
      • git add . (adicionando todas as mudanças ao stage do Git)
      • git status (deve aparecer listado o arquivo em verde)
  • Faça o commit inicial
    • Exemplo:
      • git commit -m 'Meu primeiro commit' (fazendo o primeiro commit)
  1. Adicione a sua branch com o novo commit ao repositório remoto
  • Usando o exemplo anterior: git push -u origin pessoa-desenvolvedora-projeto-x

Extra:

  1. Para executar os testes, execute o seguinte comando
    npm run test
    

About

Repositório destinado ao envio de Projeto referente ao Desafio Técnico do processo seletivo da XP inc


Languages

Language:JavaScript 99.7%Language:Dockerfile 0.3%