Initial commit: Angular frontend and Expressjs backend
This commit is contained in:
122
worklenz-backend/src/shared/email-notifications.ts
Normal file
122
worklenz-backend/src/shared/email-notifications.ts
Normal file
@@ -0,0 +1,122 @@
|
||||
import {compileTemplate} from "pug";
|
||||
import db from "../config/db";
|
||||
import {IDailyDigest} from "../interfaces/daily-digest";
|
||||
import {IEmailTemplateType} from "../interfaces/email-template-type";
|
||||
import {ITaskAssignmentsModel} from "../interfaces/task-assignments-model";
|
||||
import {sendEmail} from "./email";
|
||||
import FileConstants from "./file-constants";
|
||||
import {log_error} from "./utils";
|
||||
import {ITaskMovedToDoneRecord} from "../interfaces/task-moved-to-done";
|
||||
import {IProjectDigest} from "../interfaces/project-digest";
|
||||
import {ICommentEmailNotification, IProjectCommentEmailNotification} from "../interfaces/comment-email-notification";
|
||||
|
||||
async function updateTaskUpdatesStatus(isSent: boolean) {
|
||||
try {
|
||||
const q = isSent
|
||||
? "DELETE FROM task_updates WHERE is_sent IS TRUE;"
|
||||
: "UPDATE task_updates SET is_sent = FALSE;";
|
||||
|
||||
await db.query(q, []);
|
||||
} catch (error) {
|
||||
log_error(error);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async function addToEmailLogs(email: string, subject: string, html: string) {
|
||||
try {
|
||||
const q = `INSERT INTO email_logs (email, subject, html) VALUES ($1, $2, $3);`;
|
||||
await db.query(q, [email, subject, html]);
|
||||
} catch (error) {
|
||||
log_error(error);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export async function sendAssignmentUpdate(toEmail: string, assignment: ITaskAssignmentsModel) {
|
||||
try {
|
||||
const template = FileConstants.getEmailTemplate(IEmailTemplateType.TaskAssigneeChange) as compileTemplate;
|
||||
const isSent = assignment.teams?.length
|
||||
? await sendEmail({
|
||||
subject: "You have new assignments on Worklenz",
|
||||
to: [toEmail],
|
||||
html: template(assignment)
|
||||
})
|
||||
: true;
|
||||
|
||||
await updateTaskUpdatesStatus(!!isSent);
|
||||
addToEmailLogs(toEmail, "You have new assignments on Worklenz", template(assignment));
|
||||
} catch (e) {
|
||||
log_error(e);
|
||||
await updateTaskUpdatesStatus(false);
|
||||
}
|
||||
}
|
||||
|
||||
export async function sendDailyDigest(toEmail: string, digest: IDailyDigest) {
|
||||
try {
|
||||
const template = FileConstants.getEmailTemplate(IEmailTemplateType.DailyDigest) as compileTemplate;
|
||||
await sendEmail({
|
||||
subject: digest.note as string,
|
||||
to: [toEmail],
|
||||
html: template(digest)
|
||||
});
|
||||
} catch (e) {
|
||||
log_error(e);
|
||||
}
|
||||
}
|
||||
|
||||
export async function sendTaskDone(toEmails: string[], data: ITaskMovedToDoneRecord) {
|
||||
try {
|
||||
const template = FileConstants.getEmailTemplate(IEmailTemplateType.TaskDone) as compileTemplate;
|
||||
await sendEmail({
|
||||
subject: data.summary,
|
||||
to: toEmails,
|
||||
html: template(data)
|
||||
});
|
||||
} catch (e) {
|
||||
log_error(e);
|
||||
}
|
||||
}
|
||||
|
||||
export async function sendProjectDailyDigest(toEmail: string, digest: IProjectDigest) {
|
||||
try {
|
||||
const template = FileConstants.getEmailTemplate(IEmailTemplateType.ProjectDailyDigest) as compileTemplate;
|
||||
await sendEmail({
|
||||
subject: digest.summary,
|
||||
to: [toEmail],
|
||||
html: template(digest)
|
||||
});
|
||||
} catch (e) {
|
||||
log_error(e);
|
||||
}
|
||||
}
|
||||
|
||||
export async function sendTaskComment(toEmail: string, data: ICommentEmailNotification) {
|
||||
try {
|
||||
const template = FileConstants.getEmailTemplate(IEmailTemplateType.TaskComment) as compileTemplate;
|
||||
return await sendEmail({
|
||||
subject: data.summary,
|
||||
to: [toEmail],
|
||||
html: template(data)
|
||||
});
|
||||
} catch (e) {
|
||||
log_error(e);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
export async function sendProjectComment(toEmail: string, data: IProjectCommentEmailNotification) {
|
||||
try {
|
||||
const template = FileConstants.getEmailTemplate(IEmailTemplateType.ProjectComment) as compileTemplate;
|
||||
return await sendEmail({
|
||||
subject: data.summary,
|
||||
to: [toEmail],
|
||||
html: template(data)
|
||||
});
|
||||
} catch (e) {
|
||||
log_error(e);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
Reference in New Issue
Block a user