Remove email outbox collection and process job; refactor email templates with rich text support and slug generation

This commit is contained in:
2025-09-13 12:11:35 +02:00
parent ed9d979d3e
commit 3868e74770
34 changed files with 2674 additions and 374 deletions

View File

@@ -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'

View File

@@ -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,
})