Giter VIP home page Giter VIP logo

lana2-2karla / ng-finance Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 0.0 192 KB

Simulação de uma API dockerizada para um site interno de transações financeiras, no qual é possível realizar transferências e consultar seus dados, além de poder filtrar as transações realizadas em cash-in e cash-out.

Home Page: https://ng-finance.vercel.app

TypeScript 99.43% Dockerfile 0.57%
bcyrpt docker express joi-validation jwt-token msc nodejs postgresql typeorm typescript

ng-finance's Introduction


API - Transações Financeiras

Contexto

Simulação de uma API dockerizada para um site interno de transações financeiras, no qual é possível realizar transferências e consultar seus dados, além de poder filtrar as transações realizadas em cash-in e cash-out.

A api foi construída utilizando PostgreSQL, TypeScript e Node.js, no modelo MSC (model, service e controller). Sendo TypeORM responsável pela conexão com o banco de dados, service pelas regras de negócio, e controller por lidar com as requisições e respostas.

A partir da rota de login, todas as rotas são autenticadas utilizando JWT.

Para uma boa estruturação do código foi configurado o ESLint.

Você pode testar a aplicação através do docker seguindo a explicação em "Como rodar o projeto na sua máquina".


Habilidades desenvolvidas durante o desenvolvimento do projeto:
  • 🔥 Organizar uma aplicação completa desde o primeiro passo; 🔥
  • Criar e modelar um banco de dados utilizando TypeORM;
  • Estruturar uma aplicação em camadas;
  • Delegar responsabilidades específicas para cada camada;
  • Entender e aplicar os padrões REST;
  • 🔥 Criar aplicação dockerizada; 🔥
  • Utilizar Dotenv para as variáveis de ambiente secretas.
Tecnologias utilizadas:
  • Typescript,
  • Node.js,
  • Nodemon,
  • Express.js,
  • Dotenv,
  • PostgreSQL,
  • TypeORM,
  • JWT,
  • Joi,
  • Eslint,
  • Express-async-errors,
  • Bcrypt,
  • Joi-password-complexity.
Como rodar o projeto na sua máquina:

✨ Rodando com Docker

Clone o projeto em uma pasta/repositório git com o comando git clone

  • Caso não tenha o git instalado em sua máquina, você pode realizar a instalação através da documentação

  • Entre na pasta do projeto clonado

Instale as dependências com npm install

  • Para a aplicação funcionar corretamente você precisa editar o arquivo .env.example:
    • alterar as variáveis de ambiente com o seu nome de usuário e senha de conexão com o banco de dados.

    • mudar o nome do aquivo para .env, caso contrário a aplicação não encontrará o arquivo.

    • Você consegue encontrar mais informações aqui

Rode os containers com o comando docker-compose up -d

  • Esse serviço irá inicializar dois containers chamados postgres(port: 5432) e ng-finance(port: 3000)

  • ✨E pronto!! O projeto está rodando na sua máquina✨

👀 De olho nas dicas:

  • Para rodar o projeto desta forma, obrigatóriamente você deve ter o Git, o Docker e o Docker-compose instalados em seu computador.
Informações sobre o banco de dados:

Captura de tela de 2022-11-22 17-53-57

A imagem acima exemplifica o banco de dados e as relações entre as tabelas

  • A tabela users possui informações sobre os usuários;
  • A tabela transactions possui informações das transações feita por cada usuário;
  • A tabela accounts possui informações da conta de cada usuário: Essa tabela possui um relacionamento N:1 com a tabela transactions e 1:1 com a tabela users. Sendo assim, uma conta pode possuir várias transações, mas uma transação só pode ser feita por uma conta e uma conta só pode pertencer a um usuário assim como um usuário só pode ter uma conta.
Regras de negócio:
  • Qualquer pessoa deverá poder utilizar a aplicação. 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:

Transações de cash-out;

Transações de cash-in.

ng-finance's People

Contributors

lana2-2karla avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.