40 lines
837 B
TypeScript
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
|
|
}
|
|
}
|
|
} |