feat: implement template filtering for notifications based on channel type and enhance email rendering with HTML wrapper, ensuring chat messages are sent as plain text
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
import { v } from "convex/values";
|
||||
import { mutation, query, internalMutation, internalQuery, action } from "./_generated/server";
|
||||
import { internal, api } from "./_generated/api";
|
||||
import { renderizarTemplate } from "./templatesMensagens";
|
||||
import { wrapEmailHTML, textToHTML } from "./utils/emailTemplateWrapper";
|
||||
import {
|
||||
renderizarTemplateEmailFromDoc,
|
||||
type VariaveisTemplate,
|
||||
} from "./templatesMensagens";
|
||||
import type { Doc, Id } from "./_generated/dataModel";
|
||||
|
||||
// ========== INTERNAL QUERIES ==========
|
||||
@@ -212,37 +214,24 @@ export const enviarEmailComTemplate = action({
|
||||
}
|
||||
|
||||
// Renderizar template com variáveis
|
||||
const variaveisTemplate = args.variaveis || {};
|
||||
|
||||
const variaveisTemplate: VariaveisTemplate = args.variaveis ?? {};
|
||||
|
||||
// Garantir que urlSistema sempre tenha protocolo se presente
|
||||
if (variaveisTemplate.urlSistema && !variaveisTemplate.urlSistema.match(/^https?:\/\//i)) {
|
||||
if (
|
||||
typeof variaveisTemplate.urlSistema === "string" &&
|
||||
!variaveisTemplate.urlSistema.match(/^https?:\/\//i)
|
||||
) {
|
||||
variaveisTemplate.urlSistema = `http://${variaveisTemplate.urlSistema}`;
|
||||
}
|
||||
|
||||
const tituloRenderizado = renderizarTemplate(template.titulo, variaveisTemplate);
|
||||
const corpoRenderizado = renderizarTemplate(template.corpo, variaveisTemplate);
|
||||
|
||||
// Usar htmlCorpo se disponível, senão gerar do corpo
|
||||
let corpoHTML = template.htmlCorpo;
|
||||
if (corpoHTML) {
|
||||
// Renderizar variáveis no HTML
|
||||
corpoHTML = renderizarTemplate(corpoHTML, variaveisTemplate);
|
||||
} else {
|
||||
// Gerar HTML do corpo renderizado
|
||||
if (corpoRenderizado.includes("<") && corpoRenderizado.includes(">")) {
|
||||
corpoHTML = wrapEmailHTML(corpoRenderizado, tituloRenderizado);
|
||||
} else {
|
||||
const corpoHTMLFormatado = textToHTML(corpoRenderizado);
|
||||
corpoHTML = wrapEmailHTML(corpoHTMLFormatado, tituloRenderizado);
|
||||
}
|
||||
}
|
||||
const emailRenderizado = renderizarTemplateEmailFromDoc(template, variaveisTemplate);
|
||||
|
||||
// Enfileirar email via mutation
|
||||
const emailId: Id<"notificacoesEmail"> = await ctx.runMutation(api.email.enfileirarEmail, {
|
||||
destinatario: args.destinatario,
|
||||
destinatarioId: args.destinatarioId,
|
||||
assunto: tituloRenderizado,
|
||||
corpo: corpoHTML, // Usar HTML completo
|
||||
assunto: emailRenderizado.titulo,
|
||||
corpo: emailRenderizado.html, // HTML completo com wrapper
|
||||
templateId: template._id, // template._id sempre existe se template não é null
|
||||
enviadoPor: args.enviadoPor,
|
||||
agendadaPara: args.agendadaPara,
|
||||
|
||||
Reference in New Issue
Block a user