Menu Close

desafio-NGCash

Contexto do projeto

Aplicação dockerizada de carteira digital que contém algumas páginas, onde o usuário pode criar um novo usuário, efetuar login, realizar transferências, visualizar e filtrar todas as transações que participou (cash-in\cash-out).
A aplicação conta com uma página Home, onde é possível visualizar o balance (saldo) atual da conta, uma pré-visualização das 4 ultimas transações e dois botões que redireciona para outra página, uma para realizar a transferência e outra para visualização e filtragem de todas as transações.

Regra de negócio

  • 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.

A aplicação foi construida utilizando React.js juntamente com Node.js e Typescript.


Stacks utilizadas no projeto

Stacks Compartilhadas

  • Lint – Mantém um padrão no código da aplicação.

  • TypeScript – Mantém um código legível e evitando erros comuns.

  • uuid – Ferramenta para geração de ID’s únicos.

  • Docker – Simula o ambiente de desenvolvimento virtualmente.

Stacks Front-End

  • Vite.js – Ferramenta de configuração para uma aplicação React.

  • Axios – Utilizado para fazer as requisições das API’s.

  • React-Router-dom – Gerenciamento das rotas no React.

  • Zustand – Ferramenta para gerenciamento de estados globais.

  • Vitest – Ferramenta de construção de testes automatizados.

  • Tailwind-css – Ferramenta para estilização de componentes.

Stacks Back-End

  • Prisma ORM – ORM de bancos relacionais e não relacionais para Node.js.

  • PostegreSQL – Gerenciamento de banco de dado relacional.

  • Cors – Ferramenta de exibição de domínios.

  • Express – Ferramenta para Node.js para construção de servidores web.

  • Express-async-errors – Ferramenta para captura de erros da aplicação.

  • HTTP-status-codes – Padroniza códigos de status HTTP.

  • JOI – Ferramenta para validação de dados.

  • JWT – Ferramenta de criptografia de dados.

  • Jest – Ferramenta de construção de testes automatizados.

  • Swagger UI – Ferramenta para criação da documentação da API.

  • Bcrypt – Ferramenta para criptografia de senha.


Como iniciar o projeto Docker e localmente

Via terminal, entre na pasta raiz do projeto `./Desafio-NGCASH`:

cd Desafio-NGCASH/

Em seguida execute o seguinte comando para iniciar a aplicação via Docker-compose:

npm run start:docker

Ou para inicial a aplicação localmente utilize o comando:
OBS: Será necessário ter o Node.js (versão 16) instalado.

npm run start
npm run start:server
npm run start:web

Esses comando irá instalar as dependências de todo o server e da aplicação web, pode levar alguns minutos.

Caso queira, pode executar separadamente navegando até a raiz de cada aplicação e utilizar o mesmo comando.

Para rodar os testes, na raiz do projeto ./Desafio-NGCASH execute o seguinte comando:

npm run com
npm test

Isso irá executar os testes de uma única vez.

Web

A página web irá rodar na porta 3026 da sua máquina (http://localhost:3026/) via Docker. Localmente a aplicação indicará a porta quando for iniciada.

API

A API ira utilizar a porta 3025 da sua máquina (http://localhost:3025/).

Já existe quatro usuários cadastrados para testar a aplicação, sendo eles:

User 1

Username: Felipe

Password: MinhaSenha123

User 2

Username: João

Password: MinhaSenha123

User 3

Username: Tamiris

Password: MinhaSenha123

User 4 – Esse usuário não tem nenhuma transação.

Username: Bernardo

Password: MinhaSenha123

Caso queira conferir as informações no banco de dados (via Docker), na raiz do projeto ./Desafio-NGCASH, utilize o comando para visualizar o banco de dados.

npm run db
npx prisma studio

Isso irá abrir o banco de dados no navegador utilizando a porta porta 5555 da sua máquina (http://localhost:5555/)

Para visualizar o banco de dados na aplicação localmente, na raiz do projeto ./Desafio-NGCASH, utilize o comando:

npm run db:local

Isso irá abrir uma interface do banco de dados no navegador utilizando a porta

Documentação API

A Documentação Swagger UI irá utilizar a porta 3025, (http://localhost:3025/doc/)

View Source Code
Posted in Development