http sse for progress
This commit is contained in:
parent
728c4e05fa
commit
e693bd9aa3
3 changed files with 213 additions and 6 deletions
|
@ -17,8 +17,30 @@ import { PdfExport } from "./pdfExport";
|
|||
import NewsletterConfigService from "../service/newsletterConfigService";
|
||||
import { NewsletterConfigType } from "../enums/newsletterConfigType";
|
||||
import InternalException from "../exceptions/internalException";
|
||||
import EventEmitter from "events";
|
||||
|
||||
export interface NewsletterEventType {
|
||||
kind: "pdf" | "mail";
|
||||
newsletterId: number;
|
||||
total: number;
|
||||
iteration: number;
|
||||
msg: string;
|
||||
}
|
||||
|
||||
export abstract class NewsletterHelper {
|
||||
public static jobStatus = new EventEmitter();
|
||||
|
||||
private static formatJobEmit(
|
||||
event: "progress" | "complete",
|
||||
kind: "pdf" | "mail",
|
||||
newsletterId: number,
|
||||
total: number,
|
||||
iteration: number,
|
||||
msg: string
|
||||
) {
|
||||
this.jobStatus.emit<NewsletterEventType>(event, { kind, newsletterId, total, iteration, msg, date: new Date() });
|
||||
}
|
||||
|
||||
public static buildData(
|
||||
newsletter: newsletter,
|
||||
dates: Array<newsletterDates>,
|
||||
|
@ -149,8 +171,20 @@ export abstract class NewsletterHelper {
|
|||
allowedForMail.includes(m.sendNewsletter?.type?.id)
|
||||
);
|
||||
|
||||
for (const rec of mailRecipients) {
|
||||
this.formatJobEmit("progress", "mail", newsletterId, mailRecipients.length, 0, "starting sending");
|
||||
|
||||
for (const [index, rec] of mailRecipients.entries()) {
|
||||
this.formatJobEmit(
|
||||
"progress",
|
||||
"mail",
|
||||
newsletterId,
|
||||
mailRecipients.length,
|
||||
index,
|
||||
`start sending to ${rec.sendNewsletter.email}`
|
||||
);
|
||||
|
||||
let data = this.buildData(newsletter, dates, rec);
|
||||
|
||||
const { body } = await TemplateHelper.renderFileForModule({
|
||||
module: "newsletter",
|
||||
bodyData: data,
|
||||
|
@ -159,11 +193,37 @@ export abstract class NewsletterHelper {
|
|||
await MailHelper.sendMail(rec.sendNewsletter.email, `Newsletter von ${CLUB_NAME}`, body, [
|
||||
{ filename: "events.ics", path: this.getICSFilePath(newsletter) },
|
||||
])
|
||||
.then(() => {})
|
||||
.then(() => {
|
||||
this.formatJobEmit(
|
||||
"progress",
|
||||
"mail",
|
||||
newsletterId,
|
||||
mailRecipients.length,
|
||||
index,
|
||||
`successfully sent to ${rec.sendNewsletter.email}`
|
||||
);
|
||||
})
|
||||
.catch((err) => {
|
||||
this.formatJobEmit(
|
||||
"progress",
|
||||
"mail",
|
||||
newsletterId,
|
||||
mailRecipients.length,
|
||||
index,
|
||||
`failed to send to ${rec.sendNewsletter.email}`
|
||||
);
|
||||
console.log("mail send", err);
|
||||
});
|
||||
}
|
||||
|
||||
this.formatJobEmit(
|
||||
"complete",
|
||||
"mail",
|
||||
newsletterId,
|
||||
mailRecipients.length,
|
||||
mailRecipients.length,
|
||||
`completed sending process`
|
||||
);
|
||||
}
|
||||
|
||||
public static async printPdfs(newsletterId: number) {
|
||||
|
@ -189,7 +249,18 @@ export abstract class NewsletterHelper {
|
|||
(m) => !notAllowedForPdf.includes(m.sendNewsletter?.type?.id) || m.sendNewsletter == null
|
||||
);
|
||||
|
||||
for (const rec of pdfRecipients) {
|
||||
this.formatJobEmit("progress", "pdf", newsletterId, pdfRecipients.length, 0, "starting sending");
|
||||
|
||||
for (const [index, rec] of pdfRecipients.entries()) {
|
||||
this.formatJobEmit(
|
||||
"progress",
|
||||
"pdf",
|
||||
newsletterId,
|
||||
pdfRecipients.length,
|
||||
index,
|
||||
`start print for ${rec.lastname}, ${rec.firstname}`
|
||||
);
|
||||
|
||||
let data = this.buildData(newsletter, dates, rec, printWithAdress.includes(rec.sendNewsletter?.type?.id));
|
||||
|
||||
await PdfExport.renderFile({
|
||||
|
@ -199,20 +270,72 @@ export abstract class NewsletterHelper {
|
|||
folder: `newsletter/${newsletter.id}_${newsletter.title.replace(" ", "")}`,
|
||||
data: data,
|
||||
})
|
||||
.then(() => {})
|
||||
.then(() => {
|
||||
this.formatJobEmit(
|
||||
"progress",
|
||||
"pdf",
|
||||
newsletterId,
|
||||
pdfRecipients.length,
|
||||
index,
|
||||
`successfully printed for ${rec.lastname}, ${rec.firstname}`
|
||||
);
|
||||
})
|
||||
.catch((err) => {
|
||||
this.formatJobEmit(
|
||||
"progress",
|
||||
"pdf",
|
||||
newsletterId,
|
||||
pdfRecipients.length,
|
||||
index,
|
||||
`failed print for ${rec.lastname}, ${rec.firstname}`
|
||||
);
|
||||
console.log("pdf print", err);
|
||||
});
|
||||
}
|
||||
|
||||
this.formatJobEmit(
|
||||
"progress",
|
||||
"pdf",
|
||||
newsletterId,
|
||||
pdfRecipients.length,
|
||||
pdfRecipients.length,
|
||||
"starting pdf combine"
|
||||
);
|
||||
|
||||
await PdfExport.sqashToSingleFile(
|
||||
`newsletter/${newsletter.id}_${newsletter.title.replace(" ", "")}`,
|
||||
"allPdfsTogether",
|
||||
`newsletter/${newsletter.id}_${newsletter.title.replace(" ", "")}`
|
||||
)
|
||||
.then(() => {})
|
||||
.then(() => {
|
||||
this.formatJobEmit(
|
||||
"progress",
|
||||
"pdf",
|
||||
newsletterId,
|
||||
pdfRecipients.length,
|
||||
pdfRecipients.length,
|
||||
"sucessfully combined pdf"
|
||||
);
|
||||
})
|
||||
.catch((err) => {
|
||||
this.formatJobEmit(
|
||||
"progress",
|
||||
"pdf",
|
||||
newsletterId,
|
||||
pdfRecipients.length,
|
||||
pdfRecipients.length,
|
||||
"failed combining pdf"
|
||||
);
|
||||
console.log("pdf squash", err);
|
||||
});
|
||||
|
||||
this.formatJobEmit(
|
||||
"complete",
|
||||
"pdf",
|
||||
newsletterId,
|
||||
pdfRecipients.length,
|
||||
pdfRecipients.length,
|
||||
`completed printing process`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue