BREAKING CHANGE: Remove sendEmailWorkflow, add immediate processing to sendEmailTask

- Remove entire workflows directory and sendEmailWorkflow
- Factor out email processing logic into reusable utilities (emailProcessor.ts)
- Add processImmediately option to sendEmailTask input schema
- Update sendEmailTask to process emails immediately when requested
- Update processEmailsTask to use shared processing utilities
- Remove workflow-related exports and plugin configuration
- Simplify documentation to focus on unified task approach
- Export new email processing utilities (processEmailById, processAllEmails)
- Bump version to 0.4.0 (breaking change - workflows removed)

Migration: Use sendEmailTask with processImmediately: true instead of sendEmailWorkflow
This commit is contained in:
2025-09-14 17:53:29 +02:00
parent 845b379da3
commit a12d4c1bee
9 changed files with 100 additions and 360 deletions

View File

@@ -1,5 +1,5 @@
import type { PayloadRequest, Payload } from 'payload'
import type { MailingService } from '../services/MailingService.js'
import { processAllEmails } from '../utils/emailProcessor.js'
/**
* Data passed to the process emails task
@@ -14,18 +14,16 @@ export interface ProcessEmailsTaskData {
*/
export const processEmailsTaskHandler = async (
job: { data: ProcessEmailsTaskData },
context: { req: PayloadRequest; mailingService: MailingService }
context: { req: PayloadRequest }
) => {
const { mailingService } = context
const { req } = context
const payload = (req as any).payload
try {
console.log('🔄 Processing email queue (pending + failed emails)...')
// Process pending emails first
await mailingService.processEmails()
// Then retry failed emails
await mailingService.retryFailedEmails()
// Use the shared email processing logic
await processAllEmails(payload)
console.log('✅ Email queue processing completed successfully')
} catch (error) {
@@ -49,10 +47,10 @@ export const processEmailsTask = {
throw new Error('Mailing plugin not properly initialized')
}
// Use the existing mailing service from context
// Use the task handler
await processEmailsTaskHandler(
job as { data: ProcessEmailsTaskData },
{ req, mailingService: mailingContext.service }
{ req }
)
return {