Backend Stack of Project #18 from Driven Fullstack Bootcamp, coded in TypeScript

Overview

SISTEMA VALEX

Introdução


O projeto consiste em um serviço de emissão de cartões (vales) para empresas. O sistema permite as seguintes funcionalidades para empresas e funcionários, separadamente:

  1. As empresas podem gerar cartões de crédito de diversas categorias de compras para seus funcionários. As categorias cadastradas são:
  • educação (education)
  • compras (groceries)
  • restaurantes (restaurant)
  • transporte (transport)
  • saúde (health)
  1. Apenas um tipo de cartão pode ser gerado para cada funcionário, assim, um mesmo indivíduo é incapaz de possuir dois cartões físicos de saúde, restaurantes, etc.
  2. Cada cartão possui seu próprio limite de crédito estabelecido pela empresa e pode ser utilizado apenas no mesmo tipo de estabelecimento, ou seja, um cartão de saúde não pode efetuar compras num restaurante, etc.
  3. Funcionários precisam ativar seus cartões pelo sistema antes deste poder ser utilizado. Apenas cartões ativos podem receber recargas de saldo.
  4. Funcionários também podem optar por bloquear o cartão conforme necessidade. Cartões bloqueados são incapazes de receber recargas de créditos e também não podem efetuar compras.
  5. Funcionários também podem optar por cadastrar um cartão virtual, o qual utiliza dos fundos do cartão original. Este cartão pode ser deletado a qualquer momento e não precisa ser ativado, pois utiliza da mesma senha do cartão original.

ROTAS DE SERVIÇO

EMPRESAS

  • Para cadastro de um novo cartão de funcionário, empresas devem:
  1. Enviar uma requisição do tipo POST na rota /cards/new informando a chave x-api-key no cabeçalho (header) da requisição.
  2. A requisição de novo cartão possui dois parâmetros:
  • workerId uma string numérica referente ao usuário o qual receberá o cartão.
  • type uma string referente às categorias disponíveis de cartão. Novamente, são elas:
  1. education
  2. groceries
  3. restaurant
  4. transport
  5. health
  • Resumidamente, a requisição fica no seguinte formato:
{ 
  "workerId": string, 
  "type": string 
} 
  1. A resposta da requisição é o idenficador do cartão, o do funcionário cujo cartão foi cadastrado e o código de verificação do cartão, a ser transferido para o mesmo para uso conforme necessário.
{ 
  "workerId": string, 
  "CVV": string, 
  "cardId": integer
} 
  • Para recarga de um cartão ativo, empresas devem:
  1. Enviar uma requisição do tipo POST na rota /company/load informando a chave x-api-key no cabeçalho (header) da requisição.
  2. A requisição de novo cartão possui dois parâmetros:
  • cardId uma string numérica referente ao cartão que receberá a recarga.
  • amount um número inteiro positivo referente ao valor da recarga, em centavos. (ex.: 100 é R$ 1,00, 10000 é R$ 100,00)
  • Resumidamente, a requisição fica no seguinte formato:
{ 
  "cardId": string, 
  "amount": integer 
} 

FUNCIONÁRIOS

  • Para a ativação de um cartão, funcionários devem:
  1. Enviar uma requisição do tipo POST na rota workers/:id/enable, aonde :id é uma string numérica referente ao identificador do funcionário no banco de dados.
  2. O corpo (body) da requisição deve ser composto pelos seguintes parâmetros:
  • O identificador (id) do cartão a ser ativado
  • O código de verificação (CVV)
  • A senha com repetição.
  • Resumidamente, a requisição fica no seguinte formato:
{ 
  "cardId": string, 
  "CVV": string,
  "password": string,
  "repeatPassword": string
} 
  • Cartões já ativos não podem ser ativados novamente, e assim ficam permitidos receber recargas e efetuar compras.
  • Para o bloqueio/desbloqueio de um cartão físico, funcionários devem:
  1. Enviar uma requisição do tipo POST na rota workers/:id/security, aonde :id é uma string numérica referente ao identificador do funcionário no banco de dados.
  2. O corpo (body) da requisição deve ser composto pelos seguintes parâmetros:
  • O identificador (id) do cartão a ser ativado
  • A senha.
  • Resumidamente, a requisição fica no seguinte formato:
{ 
  "cardId": string, 
  "password": string 
} 
  1. Uma vez que o cartão está bloqueado, este não pode mais receber recargas ou efetuar compras. Para desbloqueá-lo novamente, basta efetuar esta mesma requisição novamente.
  • Para a criação de um novo cartão virtual, funcionários devem:
    1. Enviar uma requisição do tipo POST na rota workers/:id/virtual, aonde :id é uma string numérica referente ao identificador do funcionário no banco de dados.
  1. O corpo (body) da requisição deve ser composto pelos seguintes parâmetros:
  • O identificador (id) do cartão a ser ativado
  • A senha.
  • Resumidameefetuada a compra
  • A senha está correta
  • O cartão não está vencidonte, a requisição fica no seguinte formato:
{ 
  "cardId": string, 
  "password": string
} 
  1. A resposta da requisição é o código de verificação (CVV) e o número identificador do novo cartão virtual. Este deve ser utilizado ao invés do código do cartão original para compras realizadas com este novo cartão.
{ 
  "CVV": string, 
  "cardId": integer
} 
  • Para a remoção de um cartão virtual já existente, funcionários devem:
  1. Enviar uma requisição do tipo DELETE na rota workers/:id/virtual, aonde :id é uma string numérica referente ao identificador do funcionário no banco de dados.
  2. O corpo (body) da requisição deve ser composto pelos seguintes parâmetros:
  • O identificador (id) do cartão a ser ativado
  • A senha.
  • Resumidamente, a requisição fica no seguinte formato:
{ 
  "cardId": string, 
  "password": string 
} 
  • Para a visualização do histórico dos gastos de um determinado cartão, funcionários devem:
  1. Enviar uma requisição do tipo GET na rota workers/:id/history, aonde :id é uma string numérica referente ao identificador do funcionário no banco de dados.
  2. O corpo (body) da requisição deve ser composto pelos seguintes parâmetros:
  • O identificador (id) do cartão a ser ativado
  • Resumidamente, a requisição fica no seguinte formato:
{ 
  "cardId": string
} 
  1. Compras efetuadas com cartões virtuais são atrelados ao cartão original. E um cartão sem compras retorna um array vazio.

PAGAMENTOS

  • Para a realização de um novo pagamento com cartão físico, funcionários devem:
  1. Enviar uma requisição do tipo POST na rota payments/new
  2. O corpo (body) da requisição deve ser composto pelos seguintes parâmetros:
  • O identificador (id) do cartão a ser utilizado
  • A senha
  • O identificador do tipo de estabelecimento ("businessId")
  • O valor da transação, em centavos
  • Resumidamente, a requisição fica no seguinte formato:
{ 
  "cardId": string, 
  "password": string,
  "businessId": string,
  "amount": integer
} 
  1. Transações podem ser realizadas sob 6 condições:
  • Há saldo o suficiente para realizar a transação
  • O tipo do cartão condiz com o estabelecimento aonde vai ser efetuada a compra
  • A senha está correta
  • O cartão está ativo
  • O cartão não está bloqueado
  • O cartão não está vencido
  • Para a Realização de um novo pagamento online com cartão virtual ou físico, funcionários devem:
  1. Enviar uma requisição do tipo POST na rota payments/online/new
  2. O corpo (body) da requisição deve ser composto pelos seguintes parâmetros:
  • O identificador (id) do cartão a ser utilizado
  • O número do cartão a ser utilizado, utilizando 4 dígitos separado por - (ex.: 1122-3344-5566-7788)
  • O nome do portador do cartão, conforme o formato:
    • Todas as letras em maiúsculo
    • Primeiro e ultimo nomes com apenas a inicial do nome do meio
    • Ou apenas primeiro em último nomes em caso de não existir um nome do meio.
  • O código de verificação (CVV)
  • A senha
  • O identificador do tipo de estabelecimento ("businessId")
  • O valor da transação, em centavos
  • Resumidamente, a requisição fica no seguinte formato:
{ 
  "cardId": string, 
  "number": string,
  "cardholderName": string,
  "CVV": string,
  "password": string,
  "businessId": string,
  "amount": integer
} 
  1. Transações podem ser realizadas sob 6 condições:
  • Há saldo o suficiente para realizar a transação
  • O tipo do cartão condiz com o estabelecimento aonde vai ser efetuada a compra
  • A senha está correta
  • O cartão está ativo
  • O cartão não está bloqueado
  • O cartão não está vencido
You might also like...

17ᵗʰ Project developed as assessment practice during Driven's Full Stack Develpment course

17ᵗʰ Project developed as assessment practice during Driven's Full Stack Develpment course

Linkr | Back end WIP Full Stack Development Project Browse Nodejs code» - Front end code» Built With Study Playlist In this section I included all You

Aug 23, 2022

17ᵗʰ Project developed as assessment practice during Driven's Full Stack Develpment course

17ᵗʰ Project developed as assessment practice during Driven's Full Stack Develpment course

Linkr | Front end WIP Full Stack Development Project Browse JSX code» - Back end code» Built With Study Playlist In this section I included all Youtub

Jun 20, 2022

a stack-separated way to bringing together common AWS services useful in a fullstack application that uses AWS Amplify libraries

Fullstack CDK Helpers This project helps developers create common AWS services that are useful in creating fullstack applications. Backend services ar

Nov 26, 2022

Primary repository for all information related to Fast-Floward Bootcamp session 1

Primary repository for all information related to Fast-Floward Bootcamp session 1

⏩ Fast Floward Welcome to Fast Floward! We are excited to have you here. This repository is where you will find all content, resources, and links for

Dec 23, 2022

Front End do Projeto Integrador do bootcamp da Generation Brasil.

Front End do Projeto Integrador do bootcamp da Generation Brasil.

Integrantes do grupo 📖 : Alan Carlos Fabrício Rocha Guilherme Albuquerque Josiane Caroliny Lucas Melo Wesley Ninaja Genducation 📚 Projeto desenvolvi

Feb 2, 2022

BootCamp "Impulso Javascript Evolution" da DIO

Impulso Javascript Evolution Digital Innovation One O bootcamp Impulso JavaScript Evolution é um programa de recrutamento de devs de todo o Brasil e d

Jul 11, 2022

A AfirmaJobs é uma plataforma de divulgação de vagas voltadas para a diversidade e inclusão. A aplicação foi desenvolvida como projeto final do curso bootcamp da Reprograma

A AfirmaJobs é uma plataforma de divulgação de vagas voltadas para a diversidade e inclusão. A aplicação foi desenvolvida como projeto final do curso bootcamp da Reprograma

AFIRMAJOBS Este projeto é resultado do Bootcamp Back-End - Todas em Tech - { reprograma } Justificativa Grupos historicamente minorizados – população

Dec 13, 2022

This repository is exclusive to javascript bootcamp, organized at GDSC TIU. Maintained by Gourav Ghosal

JAVASCRIPT BOOTCAMP This repository is exclusive to javascript bootcamp, organized at GDSC TIU. An introductory resource by Gourav Ghosal, Chapter Lea

Nov 26, 2022
Owner
Guilherme de Oliveira
Guilherme de Oliveira
Backend stack of Project #20 from Driven's Fullstack Developer bootcamp

SISTEMA REPO PROVAS Inicialização O sistema será montado a partir do comando npm i, que fará a instalação das bibliotecas e dependências do projeto. T

Guilherme de Oliveira 7 Oct 21, 2022
14th project from Driven Full-Stack Web Dev Bootcamp

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

Darlon Gomes 4 Sep 3, 2022
Projeto de conclusão de módulo - Bootcamp Resilia Web FullStack

projeto_Modulo5_Imobiliaria_Frontend_ReactJS Projeto Final do módulo 5, Resilia Web Full Stack. ?? Descrição O objetivo deste projeto é aprender a est

Emanuel Melo 4 Jan 21, 2022
Project developed as Capstone of Q4 Backend module of the Fullstack Developer Course of Kenzie Academy Brasil by the group @ezms, @Nafly09, @RafaelSchug, @victorlscherer, @Vinicius2m, @ManoelaCunha

✨ Quokka Services ✨ ?? Serviço rápido e sem preocupação! ?? O objetivo da nossa aplicação é diminuir a dificuldade que moradores de condomínios encont

Manoela Fernanda Girello Cunha 4 May 4, 2022
Projeto desenvolvido para o curso de desenvolvimento fullstack da escola de programação Driven.

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

Caio Lemos 3 Nov 11, 2022
Projeto desenvolvido para o curso de desenvolvimento fullstack da escola de programação Driven.

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

Caio Lemos 4 Nov 11, 2022
A clean coded simple file/image uploader builded with express

Before you start... This code is nodejs version of source that my friend GDLev. He is open source creator such as I, you can discover his work by clic

kameHame HA 7 Sep 5, 2022
'event-driven' library aims to simplify building backends in an event driven style

'event-driven' library aims to simplify building backends in an event driven style(event driven architecture). For message broker, light weight Redis Stream is used and for event store, the well known NoSQL database, MongoDB, is used.

Sihoon Kim 11 Jan 4, 2023
Get-A-Room example application using Domain Driven Design and Clean Architecture. Written in TypeScript and deployed to AWS with a serverless stack.

Domain Driven Microservices on AWS in Practice This project provides a Domain Driven Design & Clean Architecture-informed, multi-service event-driven

Mikael Vesavuori 5 Dec 31, 2022
This is a full-stack exercise tracker web application built using the MERN (MongoDB, ExpressJS, ReactJS, NodeJS) stack. You can easily track your exercises with this Full-Stack Web Application.

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

WMouton 2 Dec 25, 2021