/EntityFactory

Gera entidades de formulários (usuários, produtos, categorias etc) e envia para o body da requisição post de sua API

Primary LanguageJavaScript

All Contributors

👥 EntityFactory 🏭

Gera entidades de formulários (usuários, produtos, categorias etc) e envia para o body da requisição post de sua API


🗳️ Dependencias


☀️ Get Started

> git init
> git clone https://github.com/Noctho01/EntityFactory.git
> npm install

O diretorio deste programa está em /src, dentro voce encontrara o arquivo index.js que possui um pequeno codigo que vai automatizar o envio das requisiçoes POST para o endereço endpoint especificado.


🦾 Executando programa

em um terminal windows com cross-env...
a dependencia cross-env permite que seja possivel a declaração de varias variaveis de ambiente no CLI do windows

> set SCHEME_ENV=usuario&& set QUANTITY_ENV=50&& set ROUTE_ENV=http://localhost:3000/registrar/usuario&& node src/index.js

em um terminal linux...

$ sudo SCHEME_ENV=usuario QUANTITY_ENV=50 ROUTE_ENV=http://localhost:3000/registrar/usuario node src/index.js

Dentro do diretorio do programa (fora de src) escreva este comando a cima. É preciso declarar as variaveis de ambiente para que o EntityFactor seja executado corretamente.

Variaveis de Ambiente:

  • SCHEME_ENV: recebe o nome do esquema a ser usado
  • QUANTITY_ENV: recebe o numero de entidades que seram criadas
  • ROUTE_ENV: recebe a url da rota POST que recebera os dados


  • 🔧⚙️ Configurando

    O proposito final deste programa é aumotaizar o preenchimento de aplicações json usadas para enviar dados no corpo da requisição (atualmente suporta apenas o formato JSON). Para isso EntityFactory faz juiz ao nome criando (fabricando) entidades especificadas pelo desenvolvedor, assim criando dados ficticios para serem enviados ao corpo da requisição POST/PUT/PATH... A chave para que EntityFactory crie essas entidades está nos esquemas

    📄 Esquemas

    Encarregados de armazenar as regras de negocio da entidade, especificando quais são os campos para os fomularios/json e as regras para gerar seu valor aleatoriamente.


    📝 Criando um esquema

    dentro do diretorio /src/schemes, crie um arquivo com o nome da entidade que pretende criar
    Exemplo: user.js



    Este arquivo deve exportar um objeto que possua as regras (contrato), este objeto é o esquema da sua entidade

    module.exports = {
      name: {
        require: false,
        models: ['Jhon', 'Mike', 'Sarah', 'Lessie']
      },
      email: {
        require: true,
        type: 'email',
        description: {
          minMax: [5, 10],
          include: ['aeioubdc', '123'],
          domainModels: ['gmail', 'hotmail', 'outlook']
        }
      },
      password: {
        require: true,
        type: 'string',
        description: {
          minMax: [8, 15],
          include: 'abc123',
          space: false,
          case: 'textCase'
        }
      }
    }
    
    // possivel resultado:
    // {
    //   name: 'Sarah',
    //   email: 'aooiu2213@hotmail.com',
    //   password: 'A2ccb1a3221'
    // }

    require

    especifica se o campo é obrigatorio ou não, caso não seja, o campo pode ser ou não criado, a decisao é feita aleatoriamente

    type

    usando DataTypes, deve informar qual será o tipo do valor deste campo

    • email ==> abc123@foo.com
    • cpf ==> gera um cpf valido sem pontos "xxxxxxxxxxx"
    • date ==> 1999/01/12 gera apenas datas, não gera horarios
    • string ==> valores em string, podem conter letras, numeros ou caracteres especiais (isso é determinado na propriedade include de string)
    • inter ==> valores inteiros do tipo numero
    • float ==> valores float do tipo numero
    • booleano ==> valores booleanos true, false || 1, 0

    description

    Especifica as regras aplicadas naquele campo, porem elas seguem o seu tipo. Casa tipo de dados possui um grupo especifico de descriços

    Campos de description

    campo type valores função
    space string Modelos true/false or null especifica se o texto na string deve conter espaços entre palavras ex: space:true >> "Vitoria Reges" / space:false >> "VitoriaReges"
    minMax string/inter/float [valMin, valMax] valMin: valor minimo que pode ser gerado pelo programa valMax: valor maximo que pode ser gerado pelo programa (obs: para o tipo string possui a funcionalidade de limitar o tamanho da string)
    leng string numero inteiro valor fixo do tamanho da string
    case string 'camiCase', 'upperCase', 'lowerCase', 'textCase' valor em string dos tipos de case da string ex case: camiCase || "camiCase" >> "FubarDeMilho"
    include string/email tipo email: ['abc', '123', '...'] tipo string: 'abc123...' campo obrigatorio, especifica os caracteres que serão usados para gerar o valor do campo ex: include: "bo15" >> "b1oob55" include: ["bo", "15"] >> boob515@email.com
    dominionsModels email ['gmail', 'hotmail', 'yahoo', '...'] campo obrigatorio para tipo email, especifica em um array os host de email
    yMinMax date [anoMinimo, anoMaximo] especifica o ano minimo e maximo a ser gerado pelo programa ex: yMinMax: [2002, 2004] >> 2002 || 2003 || 2004
    mMinMax date [mesMinimo, mesMaximo] especifica o mes minimo e maximo a ser gerado pelo programa ex: mMinMax: [1, 12] >> 8 || ...
    dMinMax date [diaMinimo, diaMaximo] especifica o dia minimo e maximo a ser gerado pelo programa ex: dMinMax: [1, 31] >> 19 || ...


    🕋 Modelos

    Os modelos são valores que voce estabelece para que sejam escolhidos aleatoriamente para aquele campo em especifico, campos que possuem modelos não precisam ter um tipo, apenas usando a propriedade modelos e nele passando um array com os possiveis valores a serem escolhidos.
    Dentro de /src/models voce deve criar um arquivo chamado models.js

    // Exemplo de um arquivo modelos.js
    
    module.exports = {
       // Modelos aqui ...
       nomes: {
           primeiro: [
               'Gabriel', 'Gustavo', 'Pedro', 'Maria',
               'Rafael', 'Lucas', 'Alex', 'Barbara',
               'Natalia', 'Geni', 'Jose', 'Antonio',
               'Marcia'
           ],
           segundo: [
               'Dos Santos', 'Da Silva', 'Alencar',
               'De Nobrega', 'Diniz', 'Oliveira',
               'Dos Anjos', 'Gomes', 'Cunha',
               'Souza', 'Rodrigues'
           ]
       },
       emails: [
           'gmail', 'hotmail', 'alura',
           'yahoo', 'outlook', 'apple'
       ],
       paises: [
           'Brasil', 'Estados Unidos',
           'Argentina', 'China'
       ],
    
    }

    O mesmo deve exportar um objeto que possua chaves que voce possa usar como referencia, e seus valores devem ser arrays ou objetos com arrays. os valores dentro de cada array seram usados pelo EntityFactory para gerar strigns com valores aleatorios baseado nos modelos.

    📄🕋 Esquemas com Modelos

    const Models = require('../models/models_examples')
    
    module.exports = {
      nome: {
        require: true,
        space: true,
        models: Models.nomes || ['Pedro', 'Carla', 'Marcos', 'Felipe', 'Angela'] || { primeiroNome: ['Pedro', 'Marcos'], segundoNome: ['Da Silva', 'Dos Santos'] }
      },
      tecnologias: {
        require: true,
        isArray: true,
        models: Models.tecnologias || {
          ['Java', 'Python', 'JavaScript', 'Go', 'TypeScript', 'PHP'],
          ['MySql', 'MongoDb', 'Postgree', 'SqlServer'],
          ['AWS', 'Google Cloud', 'Azure', 'Heroku'],
        }
      }
    }
    
    // resultado possivel:
    // {
    //   nome: "Pedro Da Silva",
    //   tecnologias: ['Python', 'MySql', 'Azure']
    // }

    Na primeira linha importamos um modulo que possui os Modelos de dados que voce deve especificar em /src/modelos/modelo.js

    como dito antes, ao criar um campo que utiliza modelos, não é informado o tipo do mesmo, require e space possuem a mesma função em campos tipados porem space não é uma propriedade de description quando se trata de um campo com modelos.

    veja tambem que no segundo campo 'tecnologias', temo a propriedade isArray.
    ela diz ao EntityFactory que aquele campo é um array, assim voce pode definir o tamanho do array de uma maneira simples. Voce precisa especificar um modelo do tipo objeto e o numero de chaves sera o numero do tamanho deste array.
    exemplo:

    // esquema com um campo do tipo array
    const frutas = {
      require: true,
      isArray: true,
      models: {
        alimentosChave1: ['Banana', 'Melancia', 'Melão', 'Maçã'],
        alimentosChave2: ['Amora', 'Uva', 'Mnga', 'Abacaxi'],
        alimentosChave3: ['Açaí', 'Abacate', 'Laranja', 'Morando'],
        alimentosChave4: ['Acerola', 'Cacau', 'Cajá', 'Caqui']
      }
    }
    
    // possivel resultado:
    // {
    //   frutas: ['Melancia', 'Uva', 'Açai', 'Caqui']
    // {

    como foram declaras 4 chaves no objeto em models, o resultado será um array com 4 campos

    Contributors ✨

    Thanks goes to these wonderful people (emoji key):


    Vinicius dos Santos Rodrigues

    🚇 ⚠️ 💻

    This project follows the all-contributors specification. Contributions of any kind welcome!