106 lines
2.8 KiB
TypeScript
106 lines
2.8 KiB
TypeScript
import { Request, Response } from 'express';
|
|
import { EmailService, pendingEmails } from '../services/email';
|
|
import { ETemplates } from '../types';
|
|
|
|
export class EmailController {
|
|
static async sendEmail(req: Request, res: Response) {
|
|
const { email, firstName, lastName, officeName, template } = req.body;
|
|
|
|
try {
|
|
const templateVariables = {
|
|
first_name: firstName || '',
|
|
last_name: lastName || '',
|
|
office_name: officeName || '',
|
|
link: `${process.env.APP_HOST}`
|
|
};
|
|
|
|
const result = await EmailService.sendTransactionalEmail(
|
|
email,
|
|
ETemplates[template as keyof typeof ETemplates],
|
|
'Votre notaire vous envoie un message',
|
|
templateVariables
|
|
);
|
|
|
|
if (!result.success) {
|
|
// Add to pending emails to retry later
|
|
const emailId = `${email}-${Date.now()}`;
|
|
pendingEmails.set(emailId, {
|
|
to: email,
|
|
templateName: ETemplates[template as keyof typeof ETemplates],
|
|
subject: 'Votre notaire vous envoie un message',
|
|
templateVariables,
|
|
attempts: 1,
|
|
lastAttempt: Date.now()
|
|
});
|
|
}
|
|
|
|
res.json({
|
|
success: true,
|
|
message: 'Email envoyé avec succès'
|
|
});
|
|
} catch (error: any) {
|
|
console.error('Erreur:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
message: 'Erreur serveur lors de l\'envoi de l\'email'
|
|
});
|
|
}
|
|
}
|
|
|
|
static async subscribeToList(req: Request, res: Response) {
|
|
const { email } = req.body;
|
|
|
|
try {
|
|
const result = await EmailService.addToMailchimpList(email);
|
|
|
|
if (result.success) {
|
|
res.json({
|
|
success: true,
|
|
message: 'Inscription à la liste réussie'
|
|
});
|
|
} else {
|
|
res.status(500).json({
|
|
success: false,
|
|
message: 'Échec de l\'inscription à la liste'
|
|
});
|
|
}
|
|
} catch (error: any) {
|
|
console.error('Erreur:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
message: 'Erreur serveur lors de l\'inscription'
|
|
});
|
|
}
|
|
}
|
|
|
|
static async sendReminder(req: Request, res: Response) {
|
|
const { office, customer } = req.body;
|
|
|
|
try {
|
|
const to = customer.contact.email;
|
|
|
|
const templateVariables = {
|
|
office_name: office.name,
|
|
last_name: customer.contact.last_name || '',
|
|
first_name: customer.contact.first_name || '',
|
|
link: `${process.env.APP_HOST}`
|
|
};
|
|
|
|
await EmailService.sendTransactionalEmail(
|
|
to,
|
|
ETemplates.DOCUMENT_REMINDER,
|
|
'Vous avez des documents à déposer pour votre dossier.',
|
|
templateVariables
|
|
);
|
|
|
|
res.json({
|
|
success: true,
|
|
message: 'Email envoyé avec succès'
|
|
});
|
|
} catch (error) {
|
|
console.error(error);
|
|
return;
|
|
}
|
|
}
|
|
}
|