Skip to content

andersonfpcorrea/ng-cash

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Banking App

ng-cash-video.mp4

Uma aplicaçao web fullstack dockerizada cujo objetivo é simular transferências bancárias entre usuários de um banco.

Pre-requisitos para rodar este projeto:

  • Git
  • NPM
  • Docker
  • Docker Compose

Como usar este projeto

  1. Clone este repositório:
git clone git@github.com:andersonfpcorrea/ng-cash.git
  1. Acesse o diretório raiz do projeto:
cd ng-cash
  1. Suba os containers:
docker-compose up -d
  1. Acesse localhost:5173 para entrar na página de cadastro do app.


    Signup


  2. Para interromper a execução do app:

docker-compose down

Acessando o app

A partir daqui você pode se cadastrar para acessar o app, ou ir para a página de login e usar umas das contas pre-salvas no banco de dados:

User Password
John 123456Abc
Luke 123456Abc
Mark 123456Abc
Matthew 123456Abc

Autenticação

  • username deve ter pelo menos 3 caracteres.
  • password deve ter pelo menos 8 caracteres e incluir pelo menos uma letra maiúscula e um número.

O método de autenticação utilizado no app é "Bearer token". Um JWT com 24h de validade é enviado ao cliente ao se cadastrar e ao fazer login.

Transferências entre contas cadastradas


Dashboard

Para fazer transferências basta digitar o username do destinatário e o valor a ser transferido. O valor não pode ser maior que o saldo e também não é possível transferir dinheiro para si mesmo 😃 e nem para usuários inexistentes.

As transferências válidas são processadas no servidor, salvas no banco de dados Postgres, e então os dados do dashboard são atualizados.

Filtros

Você pode filtrar as transações realizadas por tipo (cash-in e cash-out) e também por data.

Todas as features

💰 Leia aqui a lista completa de features do app 💰

Resumo

Aplicação web full stack dockerizada cujo objetivo é possibilitar a realização de transferências bancárias entre usuários do banco.

Backend

I. Stack

  • Servidor em Node.js com TypeScript;
  • Sequelize ORM
  • Banco de dados PostgreSQL

EER


II. Arquitetura do banco de dados

  • Tabela users
    • id - Primary key
    • username - Identificação do usuário
    • password - codificada (hashed) no banco de dados
    • accountId - Foreign key - accounts.id
  • Tabela accounts
    • id - Primary key
    • balance - saldo do cliente
  • Tabela transactions
    • id - Primary key
    • debitedAccountId - Foreign key - acounts.id
    • creditedAccountId - Foreign key - acounts.id
    • value
    • createdAt

III - Regras de negócio

  • Qualquer pessoa pode se cadastrar, bastando informar username e password;
  • Cada username é único e composto de pelo menos 3 caracteres;
  • passwords são compostas de 8 ou mais caracteres, sendo pelo menos um número e uma letra maiúscula;
  • Durante o processo de cadastro de um novo usuário, sua conta bancária é criada automaticamente na tabela accounts, com saldo inicial de R$100. Caso ocorra algum problema durante a criação do usuário, a tabela accounts não é afetada;
  • Todos os usuários podem logar na aplicação informando username e password. Quando o login é bem sucedido, um token JWT (com 24h de validate) é enviado ao cliente;
  • O usuário logado (com um token válido) é capaz de visualizar seu próprio saldo. Um usuário não consegue ver o saldo de outro.
  • O usuário logado é capaz de realizar transferências (cash-out) informando o username do destinatário, caso tenha saldo suficiente. Não é possível realizar transferências para si mesmo;
  • Toda nova transação bem sucedida é registrada na tabela transactions. Em caso de falha na transação, a tabela transactions não é afetada.
  • O usuário logado consegue visualizar as transações financeiras (cash-in e cash-out) de que participou. Não é possível ver transações das quais não participou;
  • O usuaário logado é capaz de filtrar transações por data de realização e/ou por tipo (cash-in/cash-out).

Frontend

I. Stack

  • React com TypeScript
  • CSS3/TailwindCSS
  • React Router

II. Regras da interface visual

  • Página de cadastro em que se informam username e password;
  • Página de login em que se informam username e password;
  • Com o usuário logado, a página principal apresenta:
    • Saldo atual
    • Seção para transferências entre usuários do banco. A transferência é feita informando username do destinatário e valor da transação;
    • Tabela com detalhes de todas as transações;
    • Mecanismo para filtrar a tabela de transações por tipo e/ou data;
    • Botão para realizar log-out.

Set-up do projeto

Backend:

  • TypeScript v.4.9.3
  • Node.js v.18.12.0
  • Express v.4.18.2
  • Sequelize v.6.25.6
  • ESLint v.8.27.0

DB

  • Postgres

Frontend

  • Vite v.3.2.3
  • TypeScript v.4.9.3
  • React v.18.2.0
  • React router v.6.4.3
  • Chackra UI v.2.4.1
  • Tailwind CSS v.3.2.4
  • ESLint v.8.27

About

Yet another banking app

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published