feat: update email notification handling to use scheduler for template sending, with improved error handling for fallback scenarios

This commit is contained in:
2025-12-01 05:45:19 -03:00
parent 4e3feca84d
commit d9e78079c8
4 changed files with 541 additions and 14 deletions

View File

@@ -364,9 +364,9 @@ export const criarSolicitacao = mutation({
urlSistema = `http://${urlSistema}`;
}
// Enviar email ao gestor usando template
// Enviar email ao gestor usando template (agendado via scheduler)
try {
await ctx.runAction(api.email.enviarEmailComTemplate, {
await ctx.scheduler.runAfter(0, api.email.enviarEmailComTemplate, {
destinatario: gestorUsuario.email,
destinatarioId: gestorId,
templateCodigo: "ausencia_solicitada",
@@ -381,8 +381,11 @@ export const criarSolicitacao = mutation({
enviadoPor: funcionarioUsuario._id,
});
} catch (error) {
// Fallback para envio direto se template não existir
console.warn("Template ausencia_solicitada não encontrado, usando envio direto:", error);
// Fallback para envio direto se houver erro ao agendar ou processar o template
console.warn(
"Erro ao agendar envio de email com template ausencia_solicitada, usando envio direto:",
error,
);
await ctx.runMutation(api.email.enfileirarEmail, {
destinatario: gestorUsuario.email,
destinatarioId: gestorId,
@@ -506,9 +509,9 @@ export const aprovar = mutation({
urlSistema = `http://${urlSistema}`;
}
// Enviar email ao funcionário usando template
// Enviar email ao funcionário usando template (agendado via scheduler)
try {
await ctx.runAction(api.email.enviarEmailComTemplate, {
await ctx.scheduler.runAfter(0, api.email.enviarEmailComTemplate, {
destinatario: funcionarioUsuario.email,
destinatarioId: funcionarioUsuario._id,
templateCodigo: "ausencia_aprovada",
@@ -523,8 +526,11 @@ export const aprovar = mutation({
enviadoPor: args.gestorId,
});
} catch (error) {
// Fallback para envio direto se template não existir
console.warn("Template ausencia_aprovada não encontrado, usando envio direto:", error);
// Fallback para envio direto se houver erro ao agendar ou processar o template
console.warn(
"Erro ao agendar envio de email com template ausencia_aprovada, usando envio direto:",
error,
);
await ctx.runMutation(api.email.enfileirarEmail, {
destinatario: funcionarioUsuario.email,
destinatarioId: funcionarioUsuario._id,
@@ -649,9 +655,9 @@ export const reprovar = mutation({
urlSistema = `http://${urlSistema}`;
}
// Enviar email ao funcionário usando template
// Enviar email ao funcionário usando template (agendado via scheduler)
try {
await ctx.runAction(api.email.enviarEmailComTemplate, {
await ctx.scheduler.runAfter(0, api.email.enviarEmailComTemplate, {
destinatario: funcionarioUsuario.email,
destinatarioId: funcionarioUsuario._id,
templateCodigo: "ausencia_reprovada",
@@ -667,8 +673,11 @@ export const reprovar = mutation({
enviadoPor: args.gestorId,
});
} catch (error) {
// Fallback para envio direto se template não existir
console.warn("Template ausencia_reprovada não encontrado, usando envio direto:", error);
// Fallback para envio direto se houver erro ao agendar ou processar o template
console.warn(
"Erro ao agendar envio de email com template ausencia_reprovada, usando envio direto:",
error,
);
await ctx.runMutation(api.email.enfileirarEmail, {
destinatario: funcionarioUsuario.email,
destinatarioId: funcionarioUsuario._id,

View File

@@ -131,7 +131,7 @@ async function registrarNotificacoes(
if (ticket.solicitanteEmail) {
// Tentar usar template, senão usar envio direto
try {
await ctx.runAction(api.email.enviarEmailComTemplate, {
await ctx.scheduler.runAfter(0, api.email.enviarEmailComTemplate, {
destinatario: ticket.solicitanteEmail,
destinatarioId: ticket.solicitanteId,
templateCodigo: "chamado_atualizado",
@@ -145,6 +145,10 @@ async function registrarNotificacoes(
});
} catch (error) {
// Fallback para envio direto
console.warn(
"Erro ao agendar envio de email com template chamado_atualizado para solicitante, usando envio direto:",
error,
);
await ctx.runMutation(api.email.enfileirarEmail, {
destinatario: ticket.solicitanteEmail,
destinatarioId: ticket.solicitanteId,
@@ -172,7 +176,7 @@ async function registrarNotificacoes(
if (responsavel?.email) {
// Tentar usar template, senão usar envio direto
try {
await ctx.runAction(api.email.enviarEmailComTemplate, {
await ctx.scheduler.runAfter(0, api.email.enviarEmailComTemplate, {
destinatario: responsavel.email,
destinatarioId: ticket.responsavelId,
templateCodigo: "chamado_atualizado",
@@ -186,6 +190,10 @@ async function registrarNotificacoes(
});
} catch (error) {
// Fallback para envio direto
console.warn(
"Erro ao agendar envio de email com template chamado_atualizado para responsável, usando envio direto:",
error,
);
await ctx.runMutation(api.email.enfileirarEmail, {
destinatario: responsavel.email,
destinatarioId: ticket.responsavelId,