send or print newsletter preview

This commit is contained in:
Julian Krauser 2024-12-28 18:03:33 +01:00
parent 5a59a63e4a
commit 5f827fb177
15 changed files with 355 additions and 28 deletions

View file

@ -1,3 +1,4 @@
import { newsletterDemoData } from "../demodata/newsletter.data";
import { protocolDemoData } from "../demodata/protocol.data";
import { PermissionModule } from "../type/permissionTypes";
@ -6,6 +7,8 @@ export abstract class DemoDataHelper {
switch (scope) {
case "protocol":
return protocolDemoData;
case "newsletter":
return newsletterDemoData;
default:
return {};
}

View file

@ -24,6 +24,9 @@ export abstract class FileSystemHelper {
static getFilesInDirectory(directoryPath: string, filetype?: string): string[] {
const fullPath = join(process.cwd(), directoryPath);
if (!existsSync(fullPath)) {
return [];
}
return readdirSync(fullPath, { withFileTypes: true })
.filter((dirent) => !dirent.isDirectory() && (!filetype || dirent.name.endsWith(filetype)))
.map((dirent) => dirent.name);

View file

@ -1,20 +1,16 @@
import { Transporter, createTransport, TransportOptions } from "nodemailer";
import { CLUB_NAME, MAIL_HOST, MAIL_PASSWORD, MAIL_PORT, MAIL_SECURE, MAIL_USERNAME } from "../env.defaults";
export default class MailHelper {
private readonly transporter: Transporter;
constructor() {
this.transporter = createTransport({
host: MAIL_HOST,
port: MAIL_PORT,
secure: (MAIL_SECURE as "true" | "false") == "true",
auth: {
user: MAIL_USERNAME,
pass: MAIL_PASSWORD,
},
} as TransportOptions);
}
export default abstract class MailHelper {
private static readonly transporter: Transporter = createTransport({
host: MAIL_HOST,
port: MAIL_PORT,
secure: (MAIL_SECURE as "true" | "false") == "true",
auth: {
user: MAIL_USERNAME,
pass: MAIL_PASSWORD,
},
} as TransportOptions);
/**
* @description send mail
@ -23,7 +19,7 @@ export default class MailHelper {
* @param {string} content
* @returns {Prmose<*>}
*/
async sendMail(target: string, subject: string, content: string): Promise<any> {
static async sendMail(target: string, subject: string, content: string): Promise<any> {
return new Promise((resolve, reject) => {
this.transporter
.sendMail({
@ -31,6 +27,7 @@ export default class MailHelper {
to: target,
subject,
text: content,
html: content,
})
.then((info) => resolve(info.messageId))
.catch((e) => reject(e));

View file

@ -26,7 +26,9 @@ export abstract class PdfExport {
const { header, footer, body } = await TemplateHelper.renderFileForModule({
module: template,
headerData: data,
bodyData: data,
footerData: data,
title: title,
});

View file

@ -48,15 +48,15 @@ export abstract class TemplateHelper {
if (moduleTemplates.headerId) {
header = await this.getTemplateFromStore(moduleTemplates.headerId);
header = this.applyDataToTemplate(header, headerData);
header = this.applyDataToTemplate(header, { title, ...headerData });
}
if (moduleTemplates.footerId) {
footer = await this.getTemplateFromStore(moduleTemplates.footerId);
footer = this.applyDataToTemplate(footer, footerData);
} else {
footer = this.getTemplateFromFile(module + ".footer");
}
footer = this.applyDataToTemplate(footer, footerData);
if (moduleTemplates.bodyId) {
body = await this.getTemplateFromStore(moduleTemplates.bodyId);