@xtr-dev/payload-mailing
Version:
Template-based email system with scheduling and job processing for PayloadCMS
62 lines (61 loc) • 2.1 kB
JavaScript
import { processAllEmails } from '../utils/emailProcessor.js';
import { createContextLogger } from '../utils/logger.js';
/**
* Handler function for processing emails
* Used internally by the task definition
*/
export const processEmailsTaskHandler = async (job, context) => {
const { req } = context;
const payload = req.payload;
// Use the shared email processing logic
await processAllEmails(payload);
};
/**
* Task definition for processing emails
* This is what gets registered with Payload's job system
*/
export const processEmailsTask = {
slug: 'process-emails',
handler: async ({ job, req }) => {
// Get mailing context from payload
const payload = req.payload;
const mailingContext = payload.mailing;
if (!mailingContext) {
throw new Error('Mailing plugin not properly initialized');
}
// Use the task handler
await processEmailsTaskHandler(job, { req });
return {
output: {
success: true,
message: 'Email queue processing completed successfully'
}
};
},
interfaceName: 'ProcessEmailsTask',
};
// For backward compatibility, export as processEmailsJob
export const processEmailsJob = processEmailsTask;
/**
* Helper function to schedule an email processing job
* Used by the plugin during initialization and can be used by developers
*/
export const scheduleEmailsJob = async (payload, queueName, delay) => {
if (!payload.jobs) {
const logger = createContextLogger(payload, 'SCHEDULER');
logger.warn('PayloadCMS jobs not configured - emails will not be processed automatically');
return;
}
try {
await payload.jobs.queue({
queue: queueName,
task: 'process-emails',
input: {},
waitUntil: delay ? new Date(Date.now() + delay) : undefined,
});
}
catch (error) {
const logger = createContextLogger(payload, 'SCHEDULER');
logger.error('Failed to schedule email processing job:', error);
}
};