Skip to content

XP - Tech case API based in TypeScript, Express, Prisma, MySQL and Zod. Deployed in Heroku and the database in PlanetScale.

Notifications You must be signed in to change notification settings

reisblucas/xp-bank

Repository files navigation

🚀 XP - Backend case 🚀

Visão geral:

Exemplos de dados a serem usados no backend:

Link para os dados disponíveis para testar na API.

Como utilizar o Swagger?

  • Faça o login com algum email e senha disponível no link acima;
  • Insira o token no Cadeado para liberar as rotas;
  • Agora você poderá fazer requisições nas rotas privadas no período de 10 min, devido a duração do JWT. 🚀

Como começar:

  • Clone o repositório ou aperte . para abrir o web editor
  • Após clonar:
    • Configure o .env seguindo o .env.example
  • Execute um dos comandos abaixo:
    • npm i && npm run dev
    • pnpm i && pnpm dev
    • yarn i && yarn dev

Construído com:

  • TypeScript
  • Prisma
  • MySQL
  • Express
  • Zod
  • Web Scrapping

Fluxograma de rotas e do banco de dados:

  • Figma
  • DrawSQL

Deployment:

  • Heroku
  • PlanetScale

Linters:

  • ESLint para garantir a qualidade do código e um padrão, seguindo as regras do airbnb para TypeScript

Por que a escolha do TypeScript e essas ferramentas?

  • A escolha de fazer o projeto em TypeScript com intuito de assegurar a tipagem e para o código futuramente ter uma melhor manutenção do mesmo, até mesmo para poder escalar;
  • Eu quis me desafiar utilizando um ORM diferente do Sequelize com intuito de ser mais produtivo enquanto fosse codar;
  • O Zod foi utilizado como alternativa para os validadores de schemas de DTOS, como Yup e Joi, também com o intuito de testar uma tecnologia nova;
  • Como queria utilizar o MySQL ao invés do PostgreSQL, busquei um banco que atendesse a minha demanda. O PlanetScale atendeu as minhas demandas para manter o banco de dados em MySQL e no Supabase eu,obrigatoriamente, deveria utilizar o PostgreSQL.
  • Alimentei o meu banco a partir de dados fakes coletados através do mockaroo, gerador de rg e cpf, geradores de endereços e cotações no InfoMoney.

Trilha:

  • - Decidir a linguagem e as ferramentas a serem utilizadas
  • - Modelar o banco (inserir link para o banco)
  • - Gerar o banco e verificar se as tabelas estão corretas
  • - Fazer script para dropar banco com o Prisma e reset de banco (abrir uma issue no prisma)
  • - Coletar dados para popular o banco
  • - Popular o banco:
    • - Padronizar dados para inserir no banco
    • - (Bônus) Algoritmo criado para trocar a posição da ordem das datas, problema no birthDate era dd/mm/yyyy -> yyyy-mm-dd
    • - Algoritmo para padronizar os dados das cotações coletadas no InfoMoney
    • - (Bônus) Hash com double salt -> pwd + salt estático + salt dinâmico
    • - Popular as 15 tabelas
  • - API:
    • - Obrigatório:
      • - GET ALL /asset/stocks === GET /ativos
      • - POST /investments/buy === /investimentos/comprar
      • - POST /investments/sell === /investimentos/vender
      • - GET BY ASSETS /asset/o/{ticker} === /ativos/{cod-ativo} || codAtivo === XPBR31
      • - POST /account/deposit === /conta/deposito (id no jwt)
      • - POST /account/withdraw === /conta/saque (id no jwt)
      • - GET /account/balance === /conta/{cod-cliente} (id no JWT)
    • - Bônus:
      • - POST /signup -> TOKEN(jwt)
      • - POST /signin -> TOKEN(jwt)
      • - GET /account/statement -> extrato da conta
      • - GET /wallets -> todas as carteiras do client
      • - GET /wallets/:walletName -> carteira específica do cliente
      • - GET /asset/i/companies -> dados de todas as companhias e seus respectivos tickers agrupados
      • - GET /asset/i/companies/{ticker} -> dados específico de uma companhia baseado no ticker(XPBR31)
      • - GET /asset/i/tickers (ALL COMPLETE INFOS) -> infos parcias das companhias e seus tickers
      • - GET /asset/i/stocks/{ticker} -> infos parciais de uma única companhia e seus tickers
  • Utils:
    • - utils:
      • newDataFormats -> formatadores de datas, optei por fazer scripts ao invés de lib
      • changeFormat data -> publicar no NPM
      • Operation -> Currying function com object literals
      • Hash -> hash simples para salvar o password do usuário com dois salts, salt dinâmico, salt no servidor com password
      • validateHash -> validador do hash para comprovar que é o usuário
      • serializeAndCreate -> padronizar os meus dados e criar um arquivo para alimentar o banco de dados

About

XP - Tech case API based in TypeScript, Express, Prisma, MySQL and Zod. Deployed in Heroku and the database in PlanetScale.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published