/** * 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 = replaceEmailVariables(emailBody, variables); // Remplacer aussi dans le titre et le pied de page template = { ...template, headerTitle: replaceEmailVariables(template.headerTitle, variables), footerText: template.footerText ? replaceEmailVariables(template.footerText, variables) : template.footerText, }; } return `
${template.logoUrl ? `Logo` : ''}

${template.headerTitle}

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

Formation Manager Itinova

${content}
`.trim(); }