Your IP : 216.73.216.220


Current Path : /home/deltalab/PMS/partner-manager-backend/rest/queries/
Upload File :
Current File : //home/deltalab/PMS/partner-manager-backend/rest/queries/data-filler.js

/* eslint-disable max-len */
/* eslint-disable new-cap */
/* eslint-disable no-await-in-loop */
const { it, en, de, base, Faker, LocaleDefinition } = require('@faker-js/faker');
const { partnerModel } = require('../../models/mongoose/partner');
const { productModel } = require('../../models/mongoose/product');
const { orderModel } = require('../../models/mongoose/order');
const { productInventoryModel } = require('../../models/mongoose/product');
const dataFiller = require('../../services/data-filler');

const improvedIT = {
  title: 'Improved IT locale',
  commerce: {
    product_name: { //they are mixed up on purpose, it sounds better in italian
      adjective: dataFiller.PRODUCT_IT,
      material: dataFiller.ADJECTIVE_IT,
      product: dataFiller.MATERIAL_IT,
    },
    product_description: dataFiller.DESCRIPTION_IT,
  },
};

const fakerIIT = new Faker({
  locale: [improvedIT, it, de, en, base],
});

const WAREHOUSE = "6482f446901ea21939a364fd";
const CHANNEL = "62a35fc7fa9bd62a98ddd875";
const CATEGORY = "62445564caee98a828a6f2dd";
const INSTANCE_ID = 'indaco2';
const STORENAME = 'storeview';

async function createFakePartnerData() {
  console.log('Filling Partner with fake data');
  const ids = [];
  for (let i = 0; i < process.env.DF_PARTNER_NUMBER; i++) {
    console.log('entro');
    const partner = new partnerModel();
    console.log(partner);
    partner.companyName = fakerIIT.company.name();
    console.log(fakerIIT.company.name);
    partner.description = fakerIIT.company.catchPhrase();
    partner.email = fakerIIT.internet.email();
    partner.address = `${fakerIIT.location.streetAddress()} - ${fakerIIT.location.zipCode()} ${fakerIIT.location.city()} (${fakerIIT.location.state()})`;
    partner.phone = fakerIIT.phone.number();
    partner.seller = partner.companyName;
    partner.vatNumber = fakerIIT.string.numeric(11);
    const savedPartner = await partner.save();
    ids.push(savedPartner._id);
  }

  return ids;
}

async function createFakeProductDataByPartner(ids) {
  const products = [];
  for (let i = 0; i < ids.length; i++) {
    console.log(`Filling Partner ${ids[i]} with fake products`);
    console.log(fakerIIT.commerce.productDescription());
    for (let j = 0; j < process.env.DF_PRODUCT_NUMBER; j++) {
      const product = new productModel();
      product.title = fakerIIT.commerce.productName();
      product.description = fakerIIT.commerce.productDescription();
      product.customDescription = fakerIIT.commerce.productDescription();
      product.price = fakerIIT.commerce.price();
      product.msrp = fakerIIT.commerce.price();
      product.sku = fakerIIT.string.alphanumeric(10);
      product.barcode = fakerIIT.string.numeric(8);
      product.weight = fakerIIT.number.float({ precision: 0.1, min: 10, max: 1500 });
      product.brand = fakerIIT.commerce.productAdjective();
      product.partnerId = ids[i];
      product.requiresShipping = fakerIIT.datatype.boolean();
      product.inventoryLevels = [];
      product.bookedQuantity = 0;
      product.trackInventory = fakerIIT.datatype.boolean();
      product.showMsrp = fakerIIT.datatype.boolean();
      product.refrigerated = fakerIIT.datatype.boolean();
      product.channelId = process.env.DF_CHANNEL;
      product.categoryId = process.env.DF_CATEGORY;
      product.size = { height: 0, length: 0, width: 0 };
      const deltaInventory = new productInventoryModel();
      deltaInventory.warehouseId = process.env.DF_WAREHOUSE;
      deltaInventory.amount = fakerIIT.number.int(100);
      product.inventoryLevels.push(deltaInventory);
      product.fragile = fakerIIT.datatype.boolean();
      product.bottle = fakerIIT.datatype.boolean();
      // save the product
      await product.save();
      products.push(product);
    }
  }
  return products;
}

async function createFakeOrdersByPartner(partners, products) {
  console.log('Filling Orders with fake data');
  for (let i = 0; i < process.env.DF_ORDERS_NUMBER; i++) {
    console.log('order');
    const order = new orderModel();
    order.omsgid = fakerIIT.string.alphanumeric(10);
    order.name = `'ORDINE ${order.omsgid}`;
    order.storeId = '1';
    order.createdAt = fakerIIT.date.past();
    order.cashOnDelivery = fakerIIT.datatype.boolean();
    order.partnerId = '6125199597b1612d8071eafd';
    order.status = 'open';
    order.fullyPaid = true;
    order.totalPriceSet = {
      amount: fakerIIT.number.float({ precision: 0.1, min: 10, max: 150 }),
      currency: 'EUR',
    };

    order.customer = {
      displayName: fakerIIT.person.fullName(),
      email: fakerIIT.internet.email(),
      phone: fakerIIT.phone.number(),
    };

    order.shippingAddress = {
      name: fakerIIT.company.name(),
      company: fakerIIT.company.name(),
      address1: fakerIIT.location.streetAddress(),
      address2: fakerIIT.location.streetAddress(),
      city: fakerIIT.location.city(),
      province: fakerIIT.location.city(),
      zip: fakerIIT.location.zipCode(),
      country: fakerIIT.location.state(),
    };

    order.items = [];
    for (let j = 0; j < process.env.DF_PRODUCTS_PER_ORDER; j++) {
      console.log('order item');
      const productIndex = Math.floor(Math.random() * products.length);
      const chosenProduct = products[productIndex];
      const item = {
        name: chosenProduct.title,
        sku: chosenProduct.sku,
        imsgid: fakerIIT.string.alphanumeric(10),
        quantity: fakerIIT.number.int({ min: 1, max: 15 }),
        weight: fakerIIT.number.float({ precision: 0.1, min: 10, max: 15 }),
        size: fakerIIT.number.float({ precision: 0.1, min: 10, max: 15 }),
        totalPriceSet: {
          amount: fakerIIT.number.float({ precision: 0.1, min: 10, max: 150 }),
          currencyCode: 'EUR',
        },
        unitPriceSet: {
          amount: fakerIIT.number.float({ precision: 0.1, min: 10, max: 50 }),
          currencyCode: 'EUR',
        },

      };
      order.items.push(item);
    }

    order.instanceId = process.env.DF_INSTANCE_ID;
    order.storeName = process.env.DF_STORENAME;
    order.fullyBooked = true;

    await order.save();
  }
}

module.exports = {
  createFakePartnerData,
  createFakeProductDataByPartner,
  createFakeOrdersByPartner,
};