Skip to content

KleversonEller/project-cash-in

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 

Repository files navigation

Contexto do projeto

Aplicação de carteira digital, 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).

img

As seguintes regras de negocio foram utilizadas para a construção dessa aplicação
  • Qualquer pessoa deverá poder fazer parte. 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 (cash-in\cash-out)

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.

  • 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 localmente


O projeto utiliza as portas (3014, 3015 e 5555) garanta que essas portas não estejam em uso antes de iniciar.
Primeiro clone o projeto para sua maquina:
git clone git@github.com:KleversonEller/project-cash-in.git

Apos clonar o projeto, entre na pasta raiz do projeto `./project-cash-in`:
cd project-cash-in


Para iniciar a aplicação localmente utilize os seguintes comandos em terminais separados:
Obs: Sera necessário ter instalado o Node.js na versão 16
npm run start
npm run start:server
npm run start:web

Esses comandos irá instalar as dependências de todo o server e da aplicação web, pode levar alguns minutos.

Para rodar todos os testes da aplicação, na raiz do projeto ./project-cash-in execute os seguintes comandos:

npm test

Isso irá executar os testes de cada aplicação de uma única vez.

Pagina Web

A página web irá rodar na porta 3014 da sua máquina (http://localhost:3014/).

API

A API ira utilizar a porta 3015 da sua máquina (http://localhost:3015/).
Para utilizar a API voce deve criar um arquivo .ENV e fazer uma conexão com um banco de dados PostgreSQL utilizando o arquivo .ENV de exemplo que foi disponibilizado, em seguida utilize o seguinte comando para subir as configurações do banco e suas tabelas:

npm run res:db

Para visualizar o banco de dados rodando a aplicação localmente, na raiz do projeto ./project-cash-in utilize o seguinte comando.

npm run db:local

Esse comando irá abrir uma interface do banco de dados no navegador na porta 5555 da sua máquina (http://localhost:5555/).

Documentação API

Para saber mais sobre a API veja sua Documentação através da rota /doc (http://localhost:3015/doc).