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. 🚀
- 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
- TypeScript
- Prisma
- MySQL
- Express
- Zod
- Web Scrapping
- Figma
- DrawSQL
- Heroku
- PlanetScale
- ESLint para garantir a qualidade do código e um padrão, seguindo as regras do airbnb para TypeScript
- 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.
- - 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
- - Obrigatório:
- 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
- - utils: