Skip to content

Aplicação 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)

Notifications You must be signed in to change notification settings

TamirisShigaki/desafio-NGCash

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 

Repository files navigation

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/)

About

Aplicação 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)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published