ng-cash-video.mp4
Uma aplicaçao web fullstack dockerizada cujo objetivo é simular transferências bancárias entre usuários de um banco.
- Git
- NPM
- Docker
- Docker Compose
- Clone este repositório:
git clone git@github.com:andersonfpcorrea/ng-cash.git
- Acesse o diretório raiz do projeto:
cd ng-cash
- Suba os containers:
docker-compose up -d
-
Acesse localhost:5173 para entrar na página de cadastro do app.
-
Para interromper a execução do app:
docker-compose down
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 |
- 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.
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.
Você pode filtrar as transações realizadas por tipo (cash-in e cash-out) e também por data.
💰 Leia aqui a lista completa de features do app 💰
Aplicação web full stack dockerizada cujo objetivo é possibilitar a realização de transferências bancárias entre usuários do banco.
I. Stack
- Servidor em Node.js com TypeScript;
- Sequelize ORM
- Banco de dados PostgreSQL
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).
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.
- 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
- Postgres
- 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