/** * Générateur de templates d'emails personnalisés * Utilise les templates stockés en base de données */ import * as db from "./db"; import { EmailTemplate } from "../drizzle/schema"; import { replaceEmailVariables, EmailVariables } from "./emailTemplateUtils"; /** * Génère le HTML d'un email en utilisant le template personnalisé * @param templateType - Type de template (à utiliser) * @param content - Contenu de l'email (legacy, sera remplacé par bodyContent) * @param variables - Variables à remplacer dans le template */ export async function generateEmailFromTemplate( templateType: string, content: string, variables?: EmailVariables ): Promise { // Récupérer le template depuis la base de données const template = await db.getEmailTemplateByType(templateType); // Si pas de template trouvé, utiliser le template par défaut if (!template) { const defaultContent = variables ? replaceEmailVariables(content, variables) : content; return getDefaultEmailTemplate(defaultContent); } return buildEmailHTML(template, content, variables); } /** * Construit le HTML de l'email avec le template */ function buildEmailHTML(template: EmailTemplate, content: string, variables?: EmailVariables): string { // Utiliser bodyContent si disponible, sinon utiliser content (legacy) let emailBody = template.bodyContent || content || ''; // Remplacer les variables si fournies if (variables && emailBody) { emailBody = replaceEmailVariables(emailBody, variables); } // Remplacer les variables dans le titre et le pied de page let titre = template.titre; let piedDePage = template.piedDePage || 'Cet email a été envoyé automatiquement par le système de gestion des formations Itinova.'; if (variables) { titre = replaceEmailVariables(titre, variables); piedDePage = replaceEmailVariables(piedDePage, variables); } return `

${titre}

${emailBody}
`.trim(); } /** * Template par défaut si aucun template personnalisé n'est trouvé */ function getDefaultEmailTemplate(content: string): string { return `

Formation Manager Itinova

${content}
`.trim(); }