Giter VIP home page Giter VIP logo

gypzchallenge-backend's Introduction

Back-end - Challenge GYPZ

Nodejs
node : v10.15.3
npm  : 6.4.1

API para gerenciar solicitações de cartões de crédito.

  1. Instalação
  2. Estrutura do Projeto
    1. Sobre Controller
    2. Sobre Models
    3. Sobre Services
    4. Sobre Utils
    5. Sobre Validation
  3. Dependências do projeto
  4. Dependências de desenvolvimento

Instalação

Para instalar as dependências utilize as linhas de comando do npm ou se preferir yarn.

npm install

Crie o arquivo .env de acordo com o arquivo .env.example.

Para esse projeto foi utilizado o banco de dados não relacional mongoDB, caso ainda não o tenho instalado, siga o passo-a-passo aqui

Estrutura do projeto

src
    ├── controller
    │   └── order.js
    ├── index.js
    ├── models
    │   └── Order.js
    ├── routes.js
    ├── services
    │   └── order.js
    ├── utils
    │   └── order.js
    └── validation
        └── order.js

Diretório models

O diretório de models é responsável por modelar e realizar a conexão com o banco de dados. Aqui criamos o schema através da biblioteca Mongoose para realizar a conexão e as transações de dados com o mongoDB, e é nesse schema que se define e valida quais os campos que devem ser salvos, além de, definir o nome da collection onde os nossos dados ficarão armazenados.

O modelo a ser armazenado deve seguir a seguinte estrutura:

  user: {
    firstName : <type: String>
    lastName  : <type: String>
    document  : <type: Number>
    bornDate  : <type: Date>
  },
  contact: {
    cellphoneNumber : <type: Number>
  },
  address: {
    country       : <type: String>
    df            : <type: String>
    country       : <type: String>
    postCode      : <type: Number>
    neighborhood  : <type: String>
    street        : <type: String>
    houseNumber   : <type: Number>
    moreInfo      : <type: String>
  },
  creditCardInfo: {
    amount      : <type: Number>
    approved    : <type: Boolean>
    creditLimit : <type: Number>
  },
  createdAt : <type: Date>

Diretório controller

O diretório de controllers é responsável por controlar a comunicação entre as requisições feitas do cliente para com a aplicação. Todas as requisições recebidas aqui são enviadas para os seus respectivos serviços localizados no diretório de services.

Diretório services

O diretório de services é responsável por manipular e persistir os dados de acordo com a regra de negócio pré-estabelecida. É aqui onde são feitas as seguintes operações:

  • Validação de dados utilizando o schema criado no diretório de validations;
  • Transformação dos dados de acordo com a regra de negócio pré-estabelecida utilizando funções disponíveis no diretório de utils;
  • Persistência e manipulação dos dados utilizando o schema criado no diretório de models.

Diretório validation

O diretório de validations contém o schema criado a partir da biblioteca Joi para validar os dados da requisição antes de iniciar as operações para persistência no banco de dados.

Diretório utils

O diretório de utils é responsável por realizar operações pontuais, como por exemplo:

  • Formatação dos dados recebidos para persistir no banco de dados;
  • Geração do score de aprovação após a solicitação do cartão de crédito ser feita;
  • Verificação do limite de crédito que o cartão terá caso seja aprovado;
  • Cálculo do limite de crédito.

Arquivo routes

O arquivo de routes.js contém todas as rotas disponíveis na aplicação:

  • Os métodos disponíveis são ( GET| POST| DELETE )

GET /order -> Retorna todas as solicitações salvas dentro de data, no seguinte formato via json:

{
  "message": "All found successfully",
  "data": [
    {
      "user": {
        "firstName" : <type: String>,
        "lastName"  : <type: String>,
        "document"  : <type: Number>,
        "bornDate"  : <type: Date>
      },
      "contact": {
        "cellphoneNumber" : <type: Number>
      },
      "address": {
        "country"       : <type: String>,
        "df"            : <type: String>,
        "county"        : <type: String>,
        "postCode"      : <type: Number>,
        "neighborhood"  : <type: String>,
        "street"        : <type: String>,
        "houseNumber"   : <type: Number>,
        "moreInfo"      : <type: String>
      },
      "creditCardInfo": {
        "amount"      : <type: Number>,
        "approved"    : <type: Boolean>,
        "creditLimit" : <type: Number>
      },
      "_id"        : <type: ObjectID>,
      "createdAt"  : <type: Date>,
    }
  ],
  "status"  : <type: Number>
}

POST /order -> Adiciona uma nova solicitação via application/x-www-form-urlencoded. Os parâmetros devem estar no seguinte formato:

  {
    firstName       : <type: String>
    lastName        : <type: String>
    document        : <type: Number>
    bornDate        : <type: Date>
    cellphoneNumber : <type: Number>
    country         : <type: String>
    df              : <type: String>
    country         : <type: String>
    postCode        : <type: Number>
    neighborhood    : <type: String>
    street          : <type: String>
    houseNumber     : <type: Number>
    moreInfo        : <type: String>
    amount          : <type: Number>
  }

DELETE /order -> Deleta uma solicitação de acordo com o _id : <type : ObjectID(). O parâmetro deve estar no seguinte formato via json:

   {
    "user": {
      "firstName" : <type: String>,
      "lastName"  : <type: String>,
      "document"  : <type: Number>,
      "bornDate"  : <type: Date>
    },
    "contact": {
      "cellphoneNumber" : <type: Number>
    },
    "address": {
      "country"       : <type: String>,
      "df"            : <type: String>,
      "county"        : <type: String>,
      "postCode"      : <type: Number>,
      "neighborhood"  : <type: String>,
      "street"        : <type: String>,
      "houseNumber"   : <type: Number>,
      "moreInfo"      : <type: String>
    },
    "creditCardInfo": {
      "amount"      : <type: Number>,
      "approved"    : <type: Boolean>,
      "creditLimit" : <type: Number>
    },
    "_id"        : <type: ObjectID>,
    "createdAt"  : <type: Date>,
  }

Após a instalação estar completa e o arquivo .env estar devidamente preenchido, para rodar o projeto localmente digite o comando:

npm start

O projeto rodará localmente no endereço http://localhost:3000/, mas você pode conferí-lo online no endereço https://gypzchallenge-backend.herokuapp.com/ onde está armazenado em um servidor no Heroku

Dependências

  • @hapi/joi: Objeto com função de schema utilizado para validar Objetos Javascript.
  • @hapi/boom: Amigável objeto para erros HTTP.
  • dotenv: Dotenv é um módulo sem dependências que carrega variáveis de ambiente a partir de um arquivo .env dentro de process.env.
  • express: Web server framework.
  • cors: CORS é um pacote node.js que pode ser utilizado para habilitar conexões para o servidor express.
  • moment: Validator e manipulador de datas.
  • mongoose: MongoDB objeto criado para realizar operações em ambientes assíncronos.

Dependências de desenvolvimento

  • nodemon: Carrega automaticamente o servidor a cada atualização feita no projeto.
  • morgan: Demonstra todas as requisições feitas para o servidor.

gypzchallenge-backend's People

Contributors

analimazn avatar

Watchers

James Cloos avatar  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.