import { Request, Response } from "express"; import TemplateUsageService from "../../../service/configuration/templateUsageService"; import TemplateUsageFactory from "../../../factory/admin/configuration/templateUsage"; import { UpdateTemplateUsageCommand } from "../../../command/configuration/templateUsage/templateUsageCommand"; import TemplateUsageCommandHandler from "../../../command/configuration/templateUsage/templateUsageCommandHandler"; import PermissionHelper from "../../../helpers/permissionHelper"; import ForbiddenRequestException from "../../../exceptions/forbiddenRequestException"; import { PermissionModule } from "../../../type/permissionTypes"; import { PdfExport } from "../../../helpers/pdfExport"; import { DemoDataHelper } from "../../../helpers/demoDataHelper"; /** * @description get all templateUsages * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function getAllTemplateUsages(req: Request, res: Response): Promise { let templateUsages = await TemplateUsageService.getAll(); if (!req.isOwner) { templateUsages = templateUsages.filter((tu) => { return ( PermissionHelper.can(req.permissions, "update", "configuration", tu.scope.split(".")[0] as PermissionModule) || PermissionHelper.can(req.permissions, "update", "club", tu.scope.split(".")[0] as PermissionModule) ); }); } res.json(TemplateUsageFactory.mapToBase(templateUsages)); } /** * @description print demo of templateUsage * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function printTemplateUsageDemo(req: Request, res: Response): Promise { const scope = req.params.scope as PermissionModule; let demoData = DemoDataHelper.getData(scope); let pdf = await PdfExport.renderFile({ template: scope, saveToDisk: false, data: demoData, }); let pdfbuffer = Buffer.from(pdf); res.setHeader("Content-Type", "application/pdf"); res.setHeader("Content-Length", pdfbuffer.byteLength); res.setHeader("Content-Disposition", "inline; filename=preview.pdf"); res.send(pdfbuffer); } /** * @description update templateUsage * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function updateTemplateUsage(req: Request, res: Response): Promise { const scope = req.params.scope; let allowedSettings = PermissionHelper.can( req.permissions, "update", "configuration", req.params.scope as PermissionModule ); let allowedClub = PermissionHelper.can(req.permissions, "update", "club", req.params.scope as PermissionModule); if (!(req.isOwner || allowedSettings || allowedClub)) { throw new ForbiddenRequestException(`missing permission for editing scope ${req.params.scope}`); } const headerId = req.body.headerId ?? null; const bodyId = req.body.bodyId ?? null; const footerId = req.body.footerId ?? null; const headerHeight = req.body.headerHeight ?? null; const footerHeight = req.body.footerHeight ?? null; let updateTemplateUsage: UpdateTemplateUsageCommand = { scope: scope, headerId: headerId, bodyId: bodyId, footerId: footerId, headerHeight: headerHeight, footerHeight: footerHeight, }; await TemplateUsageCommandHandler.update(updateTemplateUsage); res.sendStatus(204); }