BayangBec

Untitled

Dec 19th, 2023
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const { has } = require("lodash");
  2. const { v4: uuidv4 } = require('uuid');
  3. const moment = require('moment');
  4. const { APPICATION, CONFIG_SETTING } = require('@mocobaas/shared/constanta');
  5. const utilQueue = require('../../utils/queue-util');
  6. const TelegramBot = require('node-telegram-bot-api');
  7. //const helper = require('@mocobaas/shared/helpers');
  8. /**
  9.  * You can also import another NPM package
  10.  * const _ = require("lodash");
  11.  * const moment = require("moment");
  12.  */
  13.  
  14. /**
  15.  * @description handler for application-list
  16.  * @param {import('@mocobaas/server-sdk').Context} ctx
  17.  * @returns {Promise<import('@mocobaas/server-sdk').ReturnCtx>}
  18.  */
  19.  
  20. const findNextDate = async (date, angkaHari, jumlahHari) => {
  21.   // Tanggal hari ini
  22.   let today = new Date(date);
  23.  
  24.   // Mendapatkan hari ini
  25.   let currentDay = today.getDay(); // Mendapatkan hari dalam bentuk angka (0 untuk Minggu, 1 untuk Senin, dst.)
  26.  
  27.   // Menghitung selisih hari hingga mencapai hari yang diinginkan
  28.   let daysUntilNext = angkaHari - currentDay; // angka (Senin) - currentDay
  29.  
  30.   // Jika hari ini sudah hari yang diinginkan atau setelahnya, tambahkan jumlah hari untuk mencari hari yang diinginkan
  31.   if (daysUntilNext <= 0) {
  32.     daysUntilNext += jumlahHari;
  33.   }
  34.  
  35.   // Menambahkan jumlah hari yang diperlukan ke tanggal hari ini
  36.   let nextDay = new Date(today);
  37.   nextDay.setDate(today.getDate() + daysUntilNext);
  38.  
  39.   const resp = moment(nextDay).format("YYYY-MM-DD");
  40.  
  41.   return resp
  42. }
  43.  
  44. async function handler(ctx) {
  45.   const { knex } = ctx.moco.tables;
  46.   let datas = {};
  47.   const userInfo = { user_name: 'cron-activation-newspaper-magazine' };
  48.   const token = process.env.TOKEN_TELEBOT;
  49.  
  50.   try {
  51.     const dateNow = moment(new Date()).format('YYYY-MM-DD');
  52.     datas = await knex('content_subscriptions as cs')
  53.       .select('cs.id', 'cs.media_type_id', 'cs.organization_id', 'cs.catalog_id', 'catalog_file', 'catalog_info')
  54.       .join('catalogs as c', 'c.id', 'cs.catalog_id')
  55.       .whereNull('process_date')
  56.       .where('process_isrun', false)
  57.       .whereRaw(`(to_char(publish_date, 'YYYY-MM-DD') = '${dateNow}')`)
  58.       .orderBy('cs.publish_date', 'desc');
  59.       console.log(datas)
  60.  
  61.     const [credential, agentManager] = await Promise.all([
  62.       knex('config_setting').select('config_value').where('id', CONFIG_SETTING.AGENT_MANAGER).first(),
  63.       knex('application').select('app_client_api').where('id', APPICATION.AGENT_MANAGER).first()
  64.     ]);
  65.  
  66.     const configAgent = {
  67.       credential: credential.config_value[0],
  68.       app_client_api: agentManager.app_client_api,
  69.       app_id: APPICATION.CENTRALIZED
  70.     };
  71.  
  72.     if (datas.length != 0) {
  73.       // const payloadMigration = [];
  74.       const payloadActivation = [];
  75.       // const payloadDrm = [];
  76.       const payloadSubscriptionItems = [];
  77.       const trxId = uuidv4()
  78.  
  79.       await Promise.all(datas.map(async (item) => {
  80.         const findIncome = await knex('others_income_products as oip')
  81.           .select('oi.income_info', 'oip.product_copy', 'oi.income_end_date', 'oi.id')
  82.           .join('others_incomes as oi', 'oi.id', 'oip.income_id')
  83.           .where('product_category_id', item.media_type_id)
  84.           .whereRaw(`(to_char(income_start_date, 'YYYY-MM-DD') <= '${dateNow}')`)
  85.           .whereRaw(`(to_char(income_end_date, 'YYYY-MM-DD') >= '${dateNow}')`)
  86.           .where('organization_id', item.organization_id);
  87.           console.log(findIncome)
  88.  
  89.         if (findIncome.length != 0) {
  90.           await Promise.all(findIncome.map(async (i) => {
  91.             payloadActivation.push({
  92.               catalog_id: item.catalog_id,
  93.               created_at: new Date(),
  94.               epustaka_id: i.income_info.epustaka_id,
  95.               epustaka_catalog_qty: i.product_copy
  96.             });
  97.  
  98.             let expired = null;
  99.  
  100.             let findExtSyncLogs = await knex('ext_sync_logs')
  101.               .where('catalog_id', item.catalog_id)
  102.               .andWhere('process_iserror', false)
  103.               .orderBy('created_at', 'desc').first();
  104.  
  105.            
  106.             if (i.income_info.archiving_type_code) {
  107.               let dateUpload = moment(findExtSyncLogs.process_sync[0].file_created).format("YYYY-MM-DD");
  108.               switch(i.income_info.archiving_type_code) {
  109.                 case 'PERMINGGU':
  110.                     if (i.income_info.archiving_day_name === 'Senin') expired = findNextDate(dateUpload, 1, 7);
  111.                     if (i.income_info.archiving_day_name === 'Selasa') expired = findNextDate(dateUpload, 2, 7);
  112.                     if (i.income_info.archiving_day_name === 'Rabu') expired = findNextDate(dateUpload, 3, 7);
  113.                     if (i.income_info.archiving_day_name === 'Kamis') expired = findNextDate(dateUpload, 4, 7);
  114.                     if (i.income_info.archiving_day_name === 'Jumat') expired = findNextDate(dateUpload, 5, 7);
  115.                     if (i.income_info.archiving_day_name === 'Sabtu') expired = findNextDate(dateUpload, 6, 7);
  116.                     if (i.income_info.archiving_day_name === 'Minggu') expired = findNextDate(dateUpload, 0, 7);
  117.                 break;
  118.                 case 'PERDUAMINGGU':
  119.                     if (i.income_info.archiving_day_name === 'Senin') expired = findNextDate(dateUpload, 1, 14);
  120.                     if (i.income_info.archiving_day_name === 'Selasa') expired = findNextDate(dateUpload, 2, 14);
  121.                     if (i.income_info.archiving_day_name === 'Rabu') expired = findNextDate(dateUpload, 3, 14);
  122.                     if (i.income_info.archiving_day_name === 'Kamis') expired = findNextDate(dateUpload, 4, 14);
  123.                     if (i.income_info.archiving_day_name === 'Jumat') expired = findNextDate(dateUpload, 5, 14);
  124.                     if (i.income_info.archiving_day_name === 'Sabtu') expired = findNextDate(dateUpload, 6, 14);
  125.                     if (i.income_info.archiving_day_name === 'Minggu') expired = findNextDate(dateUpload, 0, 14);
  126.                 break;
  127.                 case 'PERBULAN':
  128.                   dateUpload = new Date(dateUpload);
  129.                   dateUpload.setDate(1);
  130.                   dateUpload.setMonth(dateUpload.getMonth() + 1);
  131.  
  132.                   expired = dateUpload;
  133.                 break;
  134.                 case 'PERTIGABULAN':
  135.                   dateUpload = new Date(dateUpload);
  136.                   const currentMonth = dateUpload.getMonth();
  137.  
  138.                   if (currentMonth < 2) {
  139.                     dateUpload.setDate(1);
  140.                     dateUpload.setMonth(2);
  141.                    
  142.                     expired = dateUpload;
  143.                   };
  144.                   if (currentMonth <= 5 && currentMonth >= 2) {
  145.                     dateUpload.setDate(1);
  146.                     dateUpload.setMonth(5);
  147.                    
  148.                     expired = dateUpload;
  149.                   };
  150.                   if (currentMonth <= 8 && currentMonth >= 5) {
  151.                     dateUpload.setDate(1);
  152.                     dateUpload.setMonth(8);
  153.                    
  154.                     expired = dateUpload;
  155.                   };
  156.                   if (currentMonth <= 11 && currentMonth >= 8) {
  157.                     dateUpload.setDate(1);
  158.                     dateUpload.setMonth(11)
  159.                    
  160.                     expired = dateUpload;
  161.                   };
  162.                   if (currentMonth === 11) {
  163.                     dateUpload.setDate(1);
  164.                     dateUpload.setMonth(2)
  165.                     dateUpload.setFullYear(dateUpload.getFullYear() + 1);
  166.                    
  167.                     expired = dateUpload;
  168.                   };
  169.                 break;
  170.                 case 'PERSEMESTER':
  171.                   if (currentMonth < 5) {
  172.                     dateUpload.setDate(1);
  173.                     dateUpload.setMonth(5);
  174.                    
  175.                     expired = dateUpload;
  176.                   };
  177.                   if (currentMonth <= 10 && currentMonth >= 5) {
  178.                     dateUpload.setDate(1);
  179.                     dateUpload.setMonth(11);
  180.                    
  181.                     expired = dateUpload;
  182.                   };
  183.                   if (currentMonth === 11) {
  184.                     dateUpload.setDate(1);
  185.                     dateUpload.setMonth(5)
  186.                     dateUpload.setFullYear(dateUpload.getFullYear() + 1);
  187.                    
  188.                     expired = dateUpload;
  189.                   };
  190.                 break;
  191.                 case 'PERTAHUN':
  192.                   dateUpload.setDate(1);
  193.                   dateUpload.setMonth(0)
  194.                   dateUpload.setFullYear(dateUpload.getFullYear() + 1);
  195.                    
  196.                   expired = dateUpload;
  197.                 break;
  198.                 default:
  199.                   expired = new Date(i.income_end_date);
  200.                   expired.setFullYear(expired.getFullYear() + 1000);
  201.               };
  202.             };
  203.  
  204.             payloadSubscriptionItems.push({
  205.               id: uuidv4(),
  206.               epustaka_id: i.income_info.epustaka_id,
  207.               catalog_id: item.catalog_id,
  208.               epustaka_catalog_qty: i.product_copy,
  209.               epustaka_expired: expired,
  210.               transaction_id: i.id
  211.             });
  212.  
  213.             await knex('content_subscriptions').update({process_date: new Date(), process_isrun: true}).where('id', item.id);
  214.  
  215.             if (findExtSyncLogs) {
  216.               let startProcess = new Date();
  217.               startProcess.setHours(startProcess.getHours() + 7);
  218.               const updatedNow = new Date();
  219.               const createdAt = new Date(findExtSyncLogs.process_sync[0].file_created);
  220.  
  221.               const hitung = updatedNow.setMilliseconds(0) - createdAt.setMilliseconds(0);
  222.  
  223.               // const menit = Math.floor(hitung / (1000 * 60));
  224.               // const detik = Math.floor((hitung / 1000) % 60);
  225.               let remainingTime = new Date(hitung);
  226.               console.log(remainingTime, remainingTime.getUTCHours())
  227.               const timeProcess = `${remainingTime.getUTCDate() - 1 === 0 ? '' : remainingTime.getUTCDate() - 1 `Hari,`}
  228.               ${remainingTime.getUTCHours() === 0 ? '' : remainingTime.getUTCHours() `Jam,`} ${remainingTime.getUTCMinutes()} Menit, ${remainingTime.getUTCSeconds()} Detik`
  229.    
  230.               findExtSyncLogs.process_sync.push({
  231.                 start_date: startProcess,
  232.                 process_name: `Distribusi Konten Ke Spot Baca ${i.income_info.epustaka_name}`,
  233.                 end_date: startProcess
  234.               });
  235.          
  236.               await knex('ext_sync_logs').update({process_sync: JSON.stringify(findExtSyncLogs.process_sync), updated_at: updatedNow}).where('id', findExtSyncLogs.id);
  237.  
  238.               const bot = new TelegramBot(token, { polling: false });
  239.  
  240.               let pesan = `Berikut adalah data sync koran dan majalah:\n
  241. *Proses Membaca File Dari FTP (${moment(findExtSyncLogs.process_sync[1].start_date).format("hh:mm:ss")})*
  242. Judul: *${findExtSyncLogs.catalog_title}*
  243. Jenis Konten: *${item.catalog_info.category_name}*
  244. Upload FTP: *${moment(findExtSyncLogs.process_sync[0].file_created).format("DD-MM-YYYY hh:mm:ss")}*
  245. Nama Asli File: *${findExtSyncLogs.process_sync[0].original_file_name}*
  246. Ukuran File: *${findExtSyncLogs.process_sync[0].file_size}*
  247. Proses: *${findExtSyncLogs.process_iserror === true ? 'Gagal' : 'Sukses'} ${timeProcess}*
  248. ==================================================
  249. *Proses Membaca Metadata Dari File FTP (${moment(findExtSyncLogs.process_sync[2].start_date).format("hh:mm:ss")} - ${moment(findExtSyncLogs.process_sync[2].end_date).format("hh:mm:ss")})*
  250. ==================================================
  251. *Proses Menambahkan Metadata Konten Ke Database MCCP V1 (${moment(findExtSyncLogs.process_sync[3].start_date).format("hh:mm:ss")} - ${moment(findExtSyncLogs.process_sync[3].end_date).format("hh:mm:ss")})*
  252. ==================================================
  253. *Data Masuk Dari MCCP V1 (${moment(findExtSyncLogs.process_sync[4].start_date).add(5, 'h').format("hh:mm:ss")})*
  254. ==================================================
  255. *Data Masuk Konten Berlangganan (${moment(findExtSyncLogs.process_sync[5].start_date).add(5, 'h').format("hh:mm:ss")} - ${moment(findExtSyncLogs.process_sync[5].end_date).add(5, 'h').format("hh:mm:ss")})*
  256. ==================================================
  257. *Distribusi Konten Ke Spot Baca ${i.income_info.epustaka_name} (${moment(findExtSyncLogs.process_sync[6].start_date).add(5, 'h').format("hh:mm:ss")})*`;
  258.  
  259.               const chatId = process.env.CHAT_ID_TELEBOT;
  260.               bot.sendMessage(chatId, pesan, { parse_mode: 'Markdown' });
  261.             };
  262.           }));
  263.         };
  264.       }));
  265.  
  266.       let limitManager = 50;
  267.       const pageActivation = Math.ceil(payloadActivation.length / limitManager);
  268.  
  269.       await Promise.all([
  270.         knex.batchInsert('content_subscription_items', payloadSubscriptionItems, 50),
  271.         utilQueue.booksActivationAgentManager({ ...ctx, userInfo, trxId}, configAgent, payloadActivation, pageActivation, limitManager, null, true)
  272.       ])
  273.     };
  274.  
  275.     return true;
  276.   } catch (error) {
  277.     const _messages = (error.response && has(error.response, "data")) ? (error.response.data.message || error.response.data.error) : error.message;
  278.     const payloadError = {
  279.         id: uuidv4(),
  280.         action: 'cron-activation-newspaper-magazine',
  281.         content: JSON.stringify(datas),
  282.         err_message: _messages
  283.     };
  284.  
  285.     await knex('error_logs').insert(payloadError);
  286.     return {
  287.       data: "purchasing-upload-revision",
  288.       error: { message: error.message }
  289.   };
  290.   }
  291. }
  292.  
  293. module.exports = handler;
Add Comment
Please, Sign In to add comment