Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const { has } = require("lodash");
- const { v4: uuidv4 } = require('uuid');
- const moment = require('moment');
- const { APPICATION, CONFIG_SETTING } = require('@mocobaas/shared/constanta');
- const utilQueue = require('../../utils/queue-util');
- const TelegramBot = require('node-telegram-bot-api');
- const helper = require('@mocobaas/shared/helpers');
- // @ts-check
- /**
- * You can also import another NPM package
- * const _ = require("lodash");
- * const moment = require("moment");
- */
- /**
- * @description handler for cron-activation-newspaper-magazine
- * @param {import('@mocobaas/server-sdk').SchedulerContext} ctx
- */
- async function handler(ctx) {
- const { knex } = ctx.moco.tables;
- let datas = {};
- const userInfo = { user_name: 'cron-activation-newspaper-magazine' };
- const token = process.env.TOKEN_TELEBOT;
- try {
- const dateNow = moment(new Date()).format('YYYY-MM-DD');
- datas = await knex('content_subscriptions as cs')
- .select('cs.id', 'cs.media_type_id', 'cs.organization_id', 'cs.catalog_id', 'catalog_file', 'catalog_info')
- .join('catalogs as c', 'c.id', 'cs.catalog_id')
- .whereNull('process_date')
- .where('process_isrun', false)
- .whereRaw(`(to_char(publish_date, 'YYYY-MM-DD') = '${dateNow}')`)
- .orderBy('cs.publish_date', 'desc');
- const [credential, agentManager] = await Promise.all([
- knex('config_setting').select('config_value').where('id', CONFIG_SETTING.AGENT_MANAGER).first(),
- knex('application').select('app_client_api').where('id', APPICATION.AGENT_MANAGER).first()
- ]);
- const configAgent = {
- credential: credential.config_value[0],
- app_client_api: agentManager.app_client_api,
- app_id: APPICATION.CENTRALIZED
- };
- if (datas.length != 0) {
- // const payloadMigration = [];
- const payloadActivation = [];
- // const payloadDrm = [];
- const payloadSubscriptionItems = [];
- const trxId = uuidv4()
- await Promise.all(datas.map(async (item) => {
- const findIncome = await knex('others_income_products as oip')
- .select('oi.income_info', 'oip.product_copy', 'oi.income_end_date', 'oi.id')
- .join('others_incomes as oi', 'oi.id', 'oip.income_id')
- .where('product_category_id', item.media_type_id)
- .whereRaw(`(to_char(income_start_date, 'YYYY-MM-DD') <= '${dateNow}')`)
- .whereRaw(`(to_char(income_end_date, 'YYYY-MM-DD') >= '${dateNow}')`)
- .where('organization_id', item.organization_id);
- if (findIncome.length != 0) {
- await Promise.all(findIncome.map(async (i) => {
- payloadActivation.push({
- catalog_id: item.catalog_id,
- created_at: new Date(),
- epustaka_id: i.income_info.epustaka_id,
- epustaka_catalog_qty: i.product_copy
- });
- let expired = null;
- let findExtSyncLogs = await knex('ext_sync_logs')
- .join('content_media')
- .where('catalog_id', item.catalog_id)
- .andWhere('process_iserror', false)
- .orderBy('created_at', 'desc').first();
- if (i.income_info.archiving_type_code) {
- let dateUpload = moment(findExtSyncLogs.process_sync[0].file_created).format("YYYY-MM-DD");
- switch(i.income_info.archiving_type_code) {
- case 'PERMINGGU':
- if (i.income_info.archiving_day_name === 'Senin') expired = helper.findNextDate(dateUpload, 1, 7);
- if (i.income_info.archiving_day_name === 'Selasa') expired = helper.findNextDate(dateUpload, 2, 7);
- if (i.income_info.archiving_day_name === 'Rabu') expired = helper.findNextDate(dateUpload, 3, 7);
- if (i.income_info.archiving_day_name === 'Kamis') expired = helper.findNextDate(dateUpload, 4, 7);
- if (i.income_info.archiving_day_name === 'Jumat') expired = helper.findNextDate(dateUpload, 5, 7);
- if (i.income_info.archiving_day_name === 'Sabtu') expired = helper.findNextDate(dateUpload, 6, 7);
- if (i.income_info.archiving_day_name === 'Minggu') expired = helper.findNextDate(dateUpload, 0, 7);
- break;
- case 'PERDUAMINGGU':
- if (i.income_info.archiving_day_name === 'Senin') expired = helper.findNextDate(dateUpload, 1, 14);
- if (i.income_info.archiving_day_name === 'Selasa') expired = helper.findNextDate(dateUpload, 2, 14);
- if (i.income_info.archiving_day_name === 'Rabu') expired = helper.findNextDate(dateUpload, 3, 14);
- if (i.income_info.archiving_day_name === 'Kamis') expired = helper.findNextDate(dateUpload, 4, 14);
- if (i.income_info.archiving_day_name === 'Jumat') expired = helper.findNextDate(dateUpload, 5, 14);
- if (i.income_info.archiving_day_name === 'Sabtu') expired = helper.findNextDate(dateUpload, 6, 14);
- if (i.income_info.archiving_day_name === 'Minggu') expired = helper.findNextDate(dateUpload, 0, 14);
- break;
- case 'PERBULAN':
- dateUpload = new Date(dateUpload);
- dateUpload.setDate(1);
- dateUpload.setMonth(dateUpload.getMonth() + 1);
- expired = dateUpload;
- break;
- case 'PERTIGABULAN':
- dateUpload = new Date(dateUpload);
- const currentMonth = dateUpload.getMonth();
- if (currentMonth < 2) {
- dateUpload.setDate(1);
- dateUpload.setMonth(2);
- expired = dateUpload;
- };
- if (currentMonth <= 5 && currentMonth >= 2) {
- dateUpload.setDate(1);
- dateUpload.setMonth(5);
- expired = dateUpload;
- };
- if (currentMonth <= 8 && currentMonth >= 5) {
- dateUpload.setDate(1);
- dateUpload.setMonth(8);
- expired = dateUpload;
- };
- if (currentMonth <= 11 && currentMonth >= 8) {
- dateUpload.setDate(1);
- dateUpload.setMonth(11)
- expired = dateUpload;
- };
- if (currentMonth === 11) {
- dateUpload.setDate(1);
- dateUpload.setMonth(2)
- dateUpload.setFullYear(dateUpload.getFullYear() + 1);
- expired = dateUpload;
- };
- break;
- case 'PERSEMESTER':
- if (currentMonth < 5) {
- dateUpload.setDate(1);
- dateUpload.setMonth(5);
- expired = dateUpload;
- };
- if (currentMonth <= 10 && currentMonth >= 5) {
- dateUpload.setDate(1);
- dateUpload.setMonth(11);
- expired = dateUpload;
- };
- if (currentMonth === 11) {
- dateUpload.setDate(1);
- dateUpload.setMonth(5)
- dateUpload.setFullYear(dateUpload.getFullYear() + 1);
- expired = dateUpload;
- };
- break;
- case 'PERTAHUN':
- dateUpload.setDate(1);
- dateUpload.setMonth(0)
- dateUpload.setFullYear(dateUpload.getFullYear() + 1);
- expired = dateUpload;
- break;
- default:
- expired = new Date(i.income_end_date);
- expired.setFullYear(expired.getFullYear() + 1000);
- };
- };
- payloadSubscriptionItems.push({
- id: uuidv4(),
- epustaka_id: i.income_info.epustaka_id,
- catalog_id: item.catalog_id,
- epustaka_catalog_qty: i.product_copy,
- epustaka_expired: expired,
- transaction_id: i.id
- });
- await knex('content_subscriptions').update({process_date: new Date(), process_isrun: true}).where('id', item.id);
- if (findExtSyncLogs) {
- let startProcess = new Date();
- startProcess.setHours(startProcess.getHours() + 7);
- const updatedNow = new Date();
- const createdAt = new Date(findExtSyncLogs.process_sync[0].file_created);
- const hitung = updatedNow.setMilliseconds(0) - createdAt.setMilliseconds(0);
- // const menit = Math.floor(hitung / (1000 * 60));
- // const detik = Math.floor((hitung / 1000) % 60);
- let remainingTime = new Date(hitung);
- const timeProcess = `${remainingTime.getUTCDate() - 1 === 0 ? '' : remainingTime.getUTCDate() - 1 `Hari,`}
- ${remainingTime.getUTCHours() === 0 ? '' : remainingTime.getUTCHours() `Jam,`} ${remainingTime.getUTCMinutes()} Menit, ${remainingTime.getUTCSeconds()} Detik`
- findExtSyncLogs.process_sync.push({
- start_date: startProcess,
- process_name: `Distribusi Konten Ke Spot Baca ${i.income_info.epustaka_name}`,
- end_date: startProcess
- });
- await knex('ext_sync_logs').update({process_sync: JSON.stringify(findExtSyncLogs.process_sync), updated_at: updatedNow}).where('id', findExtSyncLogs.id);
- const bot = new TelegramBot(token, { polling: false });
- let pesan = `Berikut adalah data sync koran dan majalah:\n
- *Proses Membaca File Dari FTP (${moment(findExtSyncLogs.process_sync[1].start_date).format("hh:mm:ss")})*
- Judul: *${findExtSyncLogs.catalog_title}*
- Jenis Konten: *${item.catalog_info.category_name}*
- Upload FTP: *${moment(findExtSyncLogs.process_sync[0].file_created).format("DD-MM-YYYY hh:mm:ss")}*
- Nama Asli File: *${findExtSyncLogs.process_sync[0].original_file_name}*
- Ukuran File: *${findExtSyncLogs.process_sync[0].file_size}*
- Proses: *${findExtSyncLogs.process_iserror === true ? 'Gagal' : 'Sukses'} ${timeProcess}*
- ==================================================
- *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")})*
- ==================================================
- *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")})*
- ==================================================
- *Data Masuk Dari MCCP V1 (${moment(findExtSyncLogs.process_sync[4].start_date).add(5, 'h').format("hh:mm:ss")})*
- ==================================================
- *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")})*
- ==================================================
- *Distribusi Konten Ke Spot Baca ${i.income_info.epustaka_name} (${moment(findExtSyncLogs.process_sync[6].start_date).add(5, 'h').format("hh:mm:ss")})*`;
- const chatId = process.env.CHAT_ID_TELEBOT;
- bot.sendMessage(chatId, pesan, { parse_mode: 'Markdown' });
- };
- }));
- };
- }));
- let limitManager = 50;
- const pageActivation = Math.ceil(payloadActivation.length / limitManager);
- await Promise.all([
- knex.batchInsert('content_subscription_items', payloadSubscriptionItems, 50),
- utilQueue.booksActivationAgentManager({ ...ctx, userInfo, trxId}, configAgent, payloadActivation, pageActivation, limitManager, null, true)
- ])
- };
- return true;
- } catch (error) {
- const _messages = (error.response && has(error.response, "data")) ? (error.response.data.message || error.response.data.error) : error.message;
- const payloadError = {
- id: uuidv4(),
- action: 'cron-activation-newspaper-magazine',
- content: JSON.stringify(datas),
- err_message: _messages
- };
- await knex('error_logs').insert(payloadError);
- return false;
- }
- }
- module.exports = handler;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement