generate_insert_sql_usage_menu.js 5.64 KB
const { v4: uuidv4 } = require('uuid');
const crypto = require('crypto');


const dayjs = require('dayjs');

function generateNumberUUID() {
  let numberUUID = '';
  while (numberUUID.length < 19) {
    const uuid = uuidv4();
    const hash = crypto.createHash('sha1').update(uuid).digest('hex');
    numberUUID += BigInt(`0x${hash}`).toString().padStart(19, '0');
  }
  return numberUUID.slice(0, 19);
}

function getRandomInteger(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min;
}
function getRandomDate() {
    const now = dayjs(); // Get current date and time
    const randomYear = now.year();
    const randomMonth = now.month();
    const randomDay = now.date();
    // const randomHour = Math.floor(Math.random() * 24); // Generate random hour (0-23)
  
    const randomDate = dayjs().year(randomYear).month(randomMonth).date(28).hour(0).minute(0).second(0);
  
    return randomDate;
}

function getTimeFromDate(date) {
    const time = date.format('HH:mm');
    return time;
}


class SummaryDailyUsageMenu {
    constructor(ID, LogDate, Menu, SubMenu, GroupName, Amount, CreatedAt) {
      this.ID = ID;
      this.log_date = LogDate;
      this.menu = Menu;
      this.sub_menu = SubMenu;
      this.group_name = GroupName;
      this.amount = Amount;
      this.created_at = CreatedAt;
    }
  }
  
  function generateInsertSQL(tableName, data) {
    let insertSQL = '';

    for (let i = 0; i < data.length; i++) {
      const record = data[i];
      const columns = Object.keys(record);
      const values = Object.values(record).map(formatValue);
  
      const columnsStr = columns.join(', ');
      const valuesStr = values.join(', ');
  
      const sql = `INSERT INTO ${tableName} (${columnsStr}) VALUES (${valuesStr});\n`;
      insertSQL += sql;
    }
  
    return insertSQL;
  }
  
  function formatValue(value) {
    if (typeof value === 'string') {
      if (value.startsWith('TO_TIMESTAMP')) {
        return value
      }
      return `'${value}'`;
    } else if (value instanceof Date) {
      const formattedDate = value.toISOString().slice(0, 19).replace('T', ' ');
      return `TO_TIMESTAMP('${formattedDate}', 'YYYY-MM-DD HH24:MI:SS')`;
    } else {
      return value;
    }
  }
  
function getRandomValueFromArray(array) {
    const randomIndex = Math.floor(Math.random() * array.length);
    const randomValue = array[randomIndex];
    return randomValue;
}
  
// Example usage:
const listGroup = ['ส่วนกลาง','คลินิกราชการ','สำนักงานสาธารณสุขจังหวัด','สำนักงานสาธารณสุขอำเภอ','สำนักงานป้องกันควบคุมโรค','ศูนย์บริการสาธารณสุข','โรงพยาบาล','คลินิกเอกชน','โรงพยาบาลส่งเสริมสุขภาพตำบล']
const menuList = ['แดชบอร์ด', 'การร้องขอข้อมูล', 'ประกาศและการแจ้งเตือน', 'การจัดการบทความ', 'จัดการแชทบอท', 'รายงานการใช้งานระบบ', 'เครื่องมือการจัดการ']
const menus = {
  'แดชบอร์ด': ['กลุ่มโรคติดต่อ'],
  'การร้องขอข้อมูล': ['รายงาน D506'],
  'ประกาศและการแจ้งเตือน': ['ประเภทประกาศ', 'จัดการประกาศ', 'จัดการการแจ้งเตือน'],
  'การจัดการบทความ': ['ประเภทบทความ', 'จัดการบทความสุขภาพ', 'ข้อมูลโรงพยาบาล', 'ข้อมูลผู้ใช้ (User profile)'],
  'จัดการแชทบอท': ['ประวัติสนทนา', 'หัวข้อการตอบกลับ', 'จัดการข้อความแชทบอท', 'แดชบอร์ดสถิติคำถาม', 'บันทึกการสนทนา (Chat logs)'],
  'รายงานการใช้งานระบบ': ['รายงานการใช้งานระบบ'],
  'เครื่องมือการจัดการ': ['จัดการองค์กร', 'จัดการสิทธิ์ผู้ใช้งาน', 'จัดการกลุ่มผู้ใช้งาน', 'จัดการกลุ่มผู้ใช้งาน', 'จัดการผู้ใช้งาน', 'บันทึกการใช้งาน (Logs)']
}
let sdu = []

for (let i = 0; i <= 10; i++) {
    
    let checkUnique = {}

    let r = getRandomDate()

    let menu = getRandomValueFromArray(menuList)
    let sub_menu = getRandomValueFromArray(menus[menu])
    let group = getRandomValueFromArray(listGroup)
    
    if(!checkUnique[menu+'_'+sub_menu+'_'+group]) {
        sdu.push(new SummaryDailyUsageMenu(
            generateNumberUUID(),
            `TO_TIMESTAMP('${r.format('YYYY-MM-DD HH:mm:ss')}', 'YYYY-MM-DD HH24:MI:SS')`,      // Replace with your LogDate value
            menu,
            sub_menu,
            group,
            getRandomInteger(1, 100),
            new Date()       // Replace with your CreatedAt value
        ))
    } else {
        console.log('is unique')
    }

    checkUnique[menu+'_'+sub_menu+'_'+group] = true

}

const insertSQL = generateInsertSQL('ddc.SUM_DAILY_USAGE_BY_GROUP', sdu);
console.log(insertSQL);