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.
- Data de realização da transação e/ou
A aplicação foi construida utilizando React.js juntamente com Node.js e Typescript.
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.
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.
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.
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
A Documentação Swagger UI irá utilizar a porta 3025
, (http://localhost:3025/doc/)