mirror of
https://github.com/xtr-dev/payload-mailing.git
synced 2025-12-11 00:33:23 +00:00
Flatten email processing structure to individual jobs per email
BREAKING CHANGE: Replaced batch email processing with individual jobs per email
Changes:
- Remove sendEmailTask.ts - no longer needed as each email gets its own job
- Add processEmailJob.ts - handles individual email processing
- Update sendEmail() to automatically create individual job per email
- Add processImmediately option to sendEmail() for instant processing
- Add processJobById() utility to run specific jobs immediately
- Update job registration to use new individual job structure
- Update dev API routes to use new processImmediately pattern
- Fix all TypeScript compilation errors
Benefits:
- Better job queue visibility (one job per email)
- More granular control over individual email processing
- Easier job monitoring and failure tracking
- Maintains backward compatibility via processImmediately option
- Simpler job queue management
Migration:
- Replace sendEmailJob usage with sendEmail({ processImmediately: true })
- Individual emails now appear as separate jobs in queue
- Batch processing still available via processEmailsTask if needed
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -29,6 +29,31 @@ export async function processEmailById(payload: Payload, emailId: string): Promi
|
||||
await mailingContext.service.processEmailItem(emailId)
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes a job immediately by finding and executing it
|
||||
* @param payload Payload instance
|
||||
* @param jobId The ID of the job to run immediately
|
||||
* @returns Promise that resolves when job is processed
|
||||
*/
|
||||
export async function processJobById(payload: Payload, jobId: string): Promise<void> {
|
||||
if (!payload.jobs) {
|
||||
throw new Error('PayloadCMS jobs not configured - cannot process job immediately')
|
||||
}
|
||||
|
||||
try {
|
||||
// Run a specific job by its ID (using where clause to find the job)
|
||||
await payload.jobs.run({
|
||||
where: {
|
||||
id: {
|
||||
equals: jobId
|
||||
}
|
||||
}
|
||||
})
|
||||
} catch (error) {
|
||||
throw new Error(`Failed to process job ${jobId}: ${error instanceof Error ? error.message : String(error)}`)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes all pending and failed emails using the mailing service
|
||||
* @param payload Payload instance
|
||||
|
||||
Reference in New Issue
Block a user