From 19b7456b5f572e2e9d20cd3786088a0845e0f120 Mon Sep 17 00:00:00 2001 From: Indya G Date: Tue, 2 Sep 2025 12:22:53 +0000 Subject: [PATCH] Refactored the exported function in user jobs --- src/user/jobs.js | 112 +++++++++++++++++++++++++++-------------------- 1 file changed, 65 insertions(+), 47 deletions(-) diff --git a/src/user/jobs.js b/src/user/jobs.js index 34c797e9e5..6e05f339d6 100644 --- a/src/user/jobs.js +++ b/src/user/jobs.js @@ -7,60 +7,78 @@ const meta = require('../meta'); const jobs = {}; -module.exports = function (User) { - User.startJobs = function () { - winston.verbose('[user/jobs] (Re-)starting jobs...'); +function startDigestJob({name, cronString, term, user}) { + jobs[name] = new cronJob(cronString, (async () => { + winston.verbose(`[user/jobs] Digest job (${name}) started.`); + try { + if (name === 'digest.weekly') { + const counter = await db.increment('biweeklydigestcounter'); + if (counter % 2) { + await user.digest.execute({ interval: 'biweek' }); + } + } + await user.digest.execute({ interval: term }); + } catch (err) { + winston.error(err.stack); + } + }), null, true); + winston.verbose(`[user/jobs] Starting job (${name})`); +} - let { digestHour } = meta.config; +function startJobs(user) { + winston.verbose('[user/jobs] (Re-)starting jobs...'); - // Fix digest hour if invalid - if (isNaN(digestHour)) { - digestHour = 17; - } else if (digestHour > 23 || digestHour < 0) { - digestHour = 0; - } + let { digestHour } = meta.config; - User.stopJobs(); + // Fix digest hour if invalid + if (isNaN(digestHour)) { + digestHour = 17; + } else if (digestHour > 23 || digestHour < 0) { + digestHour = 0; + } - startDigestJob('digest.daily', `0 ${digestHour} * * *`, 'day'); - startDigestJob('digest.weekly', `0 ${digestHour} * * 0`, 'week'); - startDigestJob('digest.monthly', `0 ${digestHour} 1 * *`, 'month'); + user.stopJobs(); - jobs['reset.clean'] = new cronJob('0 0 * * *', User.reset.clean, null, true); - winston.verbose('[user/jobs] Starting job (reset.clean)'); + startDigestJob({ + name: 'digest.daily', + cronString: `0 ${digestHour} * * *`, + term: 'day', + user: user, + }); + startDigestJob({ + name: 'digest.weekly', + cronString: `0 ${digestHour} * * 0`, + term: 'week', + user: user, + }); + startDigestJob({ + name: 'digest.monthly', + cronString: `0 ${digestHour} 1 * *`, + term: 'month', + user: user, + }); - winston.verbose(`[user/jobs] jobs started`); - }; + jobs['reset.clean'] = new cronJob('0 0 * * *', user.reset.clean, null, true); + winston.verbose('[user/jobs] Starting job (reset.clean)'); - function startDigestJob(name, cronString, term) { - jobs[name] = new cronJob(cronString, (async () => { - winston.verbose(`[user/jobs] Digest job (${name}) started.`); - try { - if (name === 'digest.weekly') { - const counter = await db.increment('biweeklydigestcounter'); - if (counter % 2) { - await User.digest.execute({ interval: 'biweek' }); - } - } - await User.digest.execute({ interval: term }); - } catch (err) { - winston.error(err.stack); - } - }), null, true); - winston.verbose(`[user/jobs] Starting job (${name})`); + winston.verbose(`[user/jobs] jobs started`); +}; + +function stopJobs() { + let terminated = 0; + // Terminate any active cron jobs + for (const jobId of Object.keys(jobs)) { + winston.verbose(`[user/jobs] Terminating job (${jobId})`); + jobs[jobId].stop(); + delete jobs[jobId]; + terminated += 1; } + if (terminated > 0) { + winston.verbose(`[user/jobs] ${terminated} jobs terminated`); + } +}; - User.stopJobs = function () { - let terminated = 0; - // Terminate any active cron jobs - for (const jobId of Object.keys(jobs)) { - winston.verbose(`[user/jobs] Terminating job (${jobId})`); - jobs[jobId].stop(); - delete jobs[jobId]; - terminated += 1; - } - if (terminated > 0) { - winston.verbose(`[user/jobs] ${terminated} jobs terminated`); - } - }; +module.exports = function (User) { + User.startJobs = () => startJobs(User); + User.stopJobs = () => stopJobs(); };