Skip to content

Aplicação Web Fullstack, com TypeScript, Node e React, rodando com Docker-Compose, cujo objetivo é que usuários cadastrados consigam realizar transferências monetárias, internas, entre si.

License

Notifications You must be signed in to change notification settings

brunoro7/controlCash

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

97 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Control Cash

Ideia do Projeto

Este projeto foi desenvolvido e realizado por Bruno Ro7.
É uma aplicação web fullstack, dockerizada, cujo objetivo é possibilitar que os usuários cadastrados na plataforma, consigam realizar transferências monetárias, internas, entre si.


Tecnologias usadas

Banco-de-Dados:

Desenvolvido usando: PostgreSQL;

Back-end:

Desenvolvido usando: Node.js, TypeScript, Sequelize, Sequelize-cli, Cors, Helmet, Pg, Dotenv, Express, Express-async-errors, Ts-node-dev, @types/cors, @types/express, @types/node, @types/pg, @types/sequelize, @types/bcrypt, @types/jsonwebtoken, Bcrypt e Jsonwebtoken;

Front-end:

Desenvolvido usando: Css, Html, TypeScript, React, React-router-dom,Axios, Dotenv, @types/node, @types/react, @types/react-dom, axios, Dotenv, react-router-dom e @types/react-router-dom;

Testes:

Desenvolvidos usando: Chai, Chai-http, Mocha, Sinon, EsLint, EsLint, Eslint-config-airbnb-base, Eslint-config-airbnb-typescript, Eslint-config-standard, Eslint-plugin-editorconfig, Eslint-plugin-import, Eslint-plugin-mocha, Eslint-plugin-n, Eslint-plugin-promise, Eslint-plugin-sonarjs, @types/chai, @types/mocha, @types/sinon, @typescript-eslint/eslint-plugin, @typescript-eslint/parser e @types/eslint;


Arquitetura

Tabela Users:

  • id ==> Primary-Key;

  • username ==> (o @ do usuário);

  • password ==> (com BCrypt - Hashed);

  • accountId ==> Foreign-Key (Accounts[id]);

Tabela Accounts:

  • id ==> primaryKey;

  • balance ==> No cadastro o valor é R$ 100,00;

Tabela Transactions:

  • id ==> PrimaryKey;

  • debitedAccountId ==> Foreign-Key (Accounts[id]);

  • creditedAccountId ==> Foreign-Key(Accounts[id]);

  • value ==> Total da transferência;

  • createdAt ==> Data de realização;

Diagrama:

É uma imagem em diagrama, descrevendo a arquitetura das tabelas de users, accounts e transactions.

Regras de Negócio Back-End:

  • 1. Qualquer pessoa deverá poder fazer parte, para isso, basta realizar o cadastro informando "username" e "password".
  • 2. Deve-se garantir que cada "username" seja único e composto por, pelo menos, 3 caracteres.
  • 3. Deve-se garantir que a "password" seja composta por pelo menos 8 caracteres, um número e uma letra maiúscula. Obs: Lembre-se que ela deverá ser "hashada" ao ser armazenada no banco.
  • 4. 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. Obs: É importante ressaltar que caso ocorra algum problema e o usuário não seja criado, a tabela Accounts não deverá ser afetada.
  • 5. 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.
  • 6. 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.
  • 7. 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.
  • 8. 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.
  • 9. 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.
  • 10. 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;
    • - Transações de cash-out;
    • - Transações de cash-in;

Regras de Negócio Front-End:

  • 1. Página para realizar o cadastro informando "username" e "password".
  • 2. Página para realizar o login informando "username" e "password".
  • 3. Com o usuário logado, a Página Principal deve apresentar:
    • - Balance atual (Saldo em conta) do usuário;
    • - Seção voltada à realização de transferências para outros usuários, a partir do username de quem sofrerá o cash-in;
    • - Tabela com os detalhes de todas as transações que o usuário participou;
    • - Mecanismo para filtrar a tabela por data de transação e/ou transações do tipo cash-in/cash-out;
    • - Botão para realizar o log-out;

Layout Da Aplicação

Página de Login Página de Cadastro
Screeshot Screeshot
Página Principal (Logado) Página Principal c/ Transações (Logado)
Screeshot Screeshot

Developed by - BrunoRo7


Observações mínimas para rodar o projeto:

Precisa ter instalado em sua máquina o 'docker-compose'

Link de sugestão para fazer instalação, caso aconteça mais algum erro, por favor, entre em contato por uma das vias disponíveis nessa documentação.

==> https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-20-04-pt

Precisa ter instalado em sua máquina também o 'node'

Link de sugestão para fazer instalação, caso aconteça mais algum erro, por favor, entre em contato por uma das vias disponíveis nessa documentação.

==> https://nodejs.org/pt-br/download/


Utilização do projeto:

Para cada um dos passos, haverá um exemplo do comando a ser digitado para fazer o que está sendo pedido, caso tenha dificuldades e o exemplo não seja suficiente, sinta-se a vontade para me contatar em Bruno-Ro7 StackOverFlow.

1. Abra o terminal (também pode usar o atalho de teclado "ctrl+alt+t") e crie um diretório no local de sua preferência com o comando mkdir, aqui neste exemplo usaremos o nome "projetos":

  mkdir projetos

obs: lembrando que o nome 'projetos', que demos para o diretório, também poderia ser qualquer outro nome;

2. Entre no diretório que acabou de criar:

  cd projetos

3. Faça o clone o projeto:

  git clone git@github.com:brunoro7/controlCash.git

Obs: esse comando irá criar um novo diretório, já contendo toda a aplicação!

4. Entre no diretório 'controlCash', usando o comando abaixo:

  cd controlCash

05. Para Iniciar a Aplicação, rode o comando abaixo:

  docker-compose up -d --build

Para Finalizar a Aplicação:

 docker-compose down

OBS: Você pode usar a qualquer momento o comando acima para finalizar a aplicação, mas lembre-se que ao rodar esse comando, você irá perder todos os dados salvos no banco de dados até o momento!


Após realizar o comando do "item 05", seu aplicativo já estará funcionando no browser do seu navegador com o projeto rodando!

"Endereço" ==> http://localhost:3000/


Caso queira utilizar o projeto através do '.zip' :

Utilização do projeto:

1. Faça o download do .zip do projeto no diretório de sua escolha, usando o botão 'Code', mostrado na imagem:

Screeshot

2. Descompactar o .zip com a ferramenta de sua preferência, e acessar o diretório criado:

Obs: essa "pasta"/"diretório" irá conter as configurações da sua aplicação como um todo, restando apenas rodar o aplicativo e iniciar o banco de dados!

Entre na "pasta"/"diretório", que foi extraída, com nome 'controlCash'.

3. Abra o terminal na raíz da aplicação, que é a "pasta"/"diretório" 'controlCash':

Você pode fazer isso usando o botão direito do mouse e clicando em abrir "pasta"/"diretório" no terminal.

04. Para Iniciar a Aplicação, rode o comando abaixo:

  docker-compose up -d --build

Para Finalizar a Aplicação:

 docker-compose down

OBS: Você pode usar a qualquer momento o comando acima para finalizar a aplicação, mas lembre-se que ao rodar esse comando, você irá perder todos os dados salvos no banco de dados até o momento!


Após realizar o comando do "item 04", seu aplicativo já estará funcionando no browser do seu navegador com o projeto rodando!

"Endereço" ==> http://localhost:3000/


Copyright © 2022 Bruno Rossetti