mirror of
https://github.com/xtr-dev/payload-mailing.git
synced 2025-12-11 08:43:24 +00:00
Remove email outbox collection and process job; refactor email templates with rich text support and slug generation
This commit is contained in:
@@ -1,20 +1,19 @@
|
||||
import { Job } from 'payload/jobs'
|
||||
import { processOutboxJob, ProcessOutboxJobData } from './processOutboxJob'
|
||||
import { MailingService } from '../services/MailingService'
|
||||
import { processEmailsJob, ProcessEmailsJobData } from './processEmailsJob.js'
|
||||
import { MailingService } from '../services/MailingService.js'
|
||||
|
||||
export const createMailingJobs = (mailingService: MailingService): Job[] => {
|
||||
export const createMailingJobs = (mailingService: MailingService): any[] => {
|
||||
return [
|
||||
{
|
||||
slug: 'processOutbox',
|
||||
handler: async ({ job, req }) => {
|
||||
return processOutboxJob(
|
||||
job as { data: ProcessOutboxJobData },
|
||||
slug: 'processEmails',
|
||||
handler: async ({ job, req }: { job: any; req: any }) => {
|
||||
return processEmailsJob(
|
||||
job as { data: ProcessEmailsJobData },
|
||||
{ req, mailingService }
|
||||
)
|
||||
},
|
||||
interfaceName: 'ProcessOutboxJob',
|
||||
interfaceName: 'ProcessEmailsJob',
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
export * from './processOutboxJob'
|
||||
export * from './processEmailsJob.js'
|
||||
@@ -1,21 +1,21 @@
|
||||
import { PayloadRequest } from 'payload/types'
|
||||
import { MailingService } from '../services/MailingService'
|
||||
import type { PayloadRequest } from 'payload'
|
||||
import { MailingService } from '../services/MailingService.js'
|
||||
|
||||
export interface ProcessOutboxJobData {
|
||||
type: 'process-outbox' | 'retry-failed'
|
||||
export interface ProcessEmailsJobData {
|
||||
type: 'process-emails' | 'retry-failed'
|
||||
}
|
||||
|
||||
export const processOutboxJob = async (
|
||||
job: { data: ProcessOutboxJobData },
|
||||
export const processEmailsJob = async (
|
||||
job: { data: ProcessEmailsJobData },
|
||||
context: { req: PayloadRequest; mailingService: MailingService }
|
||||
) => {
|
||||
const { mailingService } = context
|
||||
const { type } = job.data
|
||||
|
||||
try {
|
||||
if (type === 'process-outbox') {
|
||||
await mailingService.processOutbox()
|
||||
console.log('Outbox processing completed successfully')
|
||||
if (type === 'process-emails') {
|
||||
await mailingService.processEmails()
|
||||
console.log('Email processing completed successfully')
|
||||
} else if (type === 'retry-failed') {
|
||||
await mailingService.retryFailedEmails()
|
||||
console.log('Failed email retry completed successfully')
|
||||
@@ -26,10 +26,10 @@ export const processOutboxJob = async (
|
||||
}
|
||||
}
|
||||
|
||||
export const scheduleOutboxJob = async (
|
||||
export const scheduleEmailsJob = async (
|
||||
payload: any,
|
||||
queueName: string,
|
||||
jobType: 'process-outbox' | 'retry-failed',
|
||||
jobType: 'process-emails' | 'retry-failed',
|
||||
delay?: number
|
||||
) => {
|
||||
if (!payload.jobs) {
|
||||
@@ -40,7 +40,7 @@ export const scheduleOutboxJob = async (
|
||||
try {
|
||||
await payload.jobs.queue({
|
||||
queue: queueName,
|
||||
task: 'processOutbox',
|
||||
task: 'processEmails',
|
||||
input: { type: jobType },
|
||||
waitUntil: delay ? new Date(Date.now() + delay) : undefined,
|
||||
})
|
||||
Reference in New Issue
Block a user