Skip to content

🧱 Backend do NG.CASH (desafio técnico)

Notifications You must be signed in to change notification settings

allbertuu/ng-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ng-backend

🧱 Backend do NG.CASH (desafio técnico)

Rodando localmente â–¶

Nesse projeto é usado apenas o Yarn como gerenciador de pacotes. Veja o website oficial do Yarn aqui.
Você pode usar as minhas credenciais para acessar o DB em deploy, e gerar o Token JWT. Só adicionar no seu arquivo .env o seguinte:

DATABASE_URL="postgres://albertosantos:C5PiXQwjOpoKoxNRPbR01mBKuKmVOZKz@dpg-cdtme42en0hlde3rojr0-a.oregon-postgres.render.com/ngdatabase"
SECRET_TOKEN="94f37b8fea19dcd3e9ad4283af4aa2e2"

Clone o projeto

  git clone https://github.com/allbertuu/ng-backend

Entre no diretório do projeto

  cd ng-backend

Instale as dependências

  yarn install

Rode o migrate do Prisma ORM

Importante avisar que antes deve ser criado um arquivo .env, com uma chave DATABASE_URL, de valor contendo o Connection URL do seu banco de dados PostgreSQL.

  yarn migrate

Se desejar, rode o Studio do Prisma ORM

  yarn studio

Irá rodar na porta 5555 do localhost

Rode o servidor

Antes de iniciar o server, verifique/adicione se no arquivo .env há uma chave SECRET_TOKEN, de valor contendo um HASH para ser usado na geração do Token JWT.

  yarn dev

Rodar testes (Jest) (ATUALIZAÇÃO FUTURA)

  yarn test

Stack utilizada âš™

  • TypeScript (para tipagem estática no JS)
  • Bcrypt (para "hashar" a password no DB)
  • CORS
  • Insomnia (para testes na API)
  • Bearer Token (para autorizações)
  • Token JWT (para autenticações)
  • Prisma ORM (para criação e manipulação no DB - PostgreSQL)
  • express-async-errors (para lidar com erros no Backend - criei um módulo personalizado para erros)
  • jwt-decode (para decode do Token JWT)
  • CI/CD no GitHub Actions para formatação do código automatizado (Prettier)

Regras de negócio para estruturação dos endpoints 📑

Clique para expandir
  • Qualquer pessoa deverá poder fazer parte da NG. Para isso, basta realizar o cadastro informando username e password.
  • Deve-se garantir que cada username seja único e composto por, pelo menos, 3 caracteres.
  • Deve-se garantir que a password seja composta por pelo menos 8 caracteres, um número e uma letra maiúscula. Lembre-se que ela deverá ser hashada ao ser armazenada no banco.
  • Durante o processo de cadastro de um novo usuário, sua respectiva conta deverá ser criada automaticamente na tabela Accounts com um balance de R$ 100,00. É importante ressaltar que caso ocorra algum problema e o usuário não seja criado, a tabela Accounts não deverá ser afetada.
  • Todo usuário deverá conseguir logar na aplicação informando username e password. Caso o login seja bem-sucedido, um token JWT (com 24h de validade) deverá ser fornecido.
  • Todo usuário logado (ou seja, que apresente um token válido) deverá ser capaz de visualizar seu próprio balance atual. Um usuário A não pode visualizar o balance de um usuário B, por exemplo.
  • Todo usuário logado (ou seja, que apresente um token válido) deverá ser capaz de realizar um cash-out informando o username do usuário que sofrerá o cash-in), caso apresente balance suficiente para isso. Atente-se ao fato de que um usuário não deverá ter a possibilidade de realizar uma transferência para si mesmo.
  • Toda nova transação bem-sucedida deverá ser registrada na tabela Transactions. Em casos de falhas transacionais, a tabela Transactions não deverá ser afetada.
  • Todo usuário logado (ou seja, que apresente um token válido) deverá ser capaz de visualizar as transações financeiras (cash-out e cash-in) que participou. Caso o usuário não tenha participado de uma determinada transação, ele nunca poderá ter acesso à ela.
  • [-] Todo usuário logado (ou seja, que apresente um token válido) deverá ser capaz de filtrar as transações financeiras que participou por:
    • [-] Data de realização da transação e/ou
      • [-] Transações de cash-out;
      • [-] Transações de cash-in.

Arquitetura 🧱

Clique para expandir
  • Tabela Users:
    • id —> PK
    • username (o @ do usuário)
    • password (hasheada)
    • accountId —> FK Accounts[id]
  • Tabela Accounts:
    • id —> PK
    • balance
  • Tabela Transactions: - id —> PK - debitedAccountId —> FK Accounts[id] - creditedAccountId —> FK Accounts[id] - value - createdAt

Relacionados 🔗

Segue alguns projetos relacionados

NG Frontend

Documentação da API 🧱

Instale o Insomnia e importe esse arquivo JSON com a coleção NG Backend.

Importante: lembre de gerar um Token JWT em uma sessão de Login (rota /session), e alterar o AuthorizationToken no Sub Environment, para então fazer as requisições à API devidamente autenticado (Token dura 24h).

Aprendizados 📚

Nesse desafio, enfrentei muitos obstáculos e dificuldades. Nunca tinha me desafiado a construir algo tão grande e com conhecimentos tão abrangentes e interdisciplinares. Fiz um Backend completo, robusto. Pode até não ser a coisa mais íncrivel, mas certamente pra mim foi.
Claro que, nunca flertei com a desistência, ainda mais quando sei do meu potencial de sucesso, e muito menos seria agora.
Em 8 dias aprendi desenvolvendo esse APP sozinho, o que jamais aprendi até aqui (11/22). Aprendi a continuar mesmo em uma situação difícil e arrojada, e melhorei ainda mais meu mindset do que realmente é um desenvolvedor. Deixo para você descobrir também, mas saiba que ser proativo e curioso já te deixa bemmm a frente.

Feedback 💬

Se você tiver algum feedback, me manda uma mensagem no LinkedIn 😉