Advertisement
BayangBec

Untitled

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