mailer/src/services/email.ts

40 lines
837 B
TypeScript

import { emailQueue } from '../queues/email.queue'
import { config } from '../config/env'
interface EmailOptions {
to: string
subject: string
html: string
text: string
}
export class EmailService {
async sendEmail(options: EmailOptions): Promise<void> {
const email = {
from: config.email.from,
...options
}
// Add to queue instead of sending directly
await emailQueue.add('send-email', email, {
removeOnComplete: true,
// removeOnFail: 1000
})
}
async getQueueStatus() {
const [waiting, active, completed, failed] = await Promise.all([
emailQueue.getWaitingCount(),
emailQueue.getActiveCount(),
emailQueue.getCompletedCount(),
emailQueue.getFailedCount()
])
return {
waiting,
active,
completed,
failed
}
}
}