Files
worklenz/worklenz-backend/src/middlewares/validators/task-attachments-validator.ts
chamikaJ 8825b0410a init
2025-04-17 18:28:54 +05:30

33 lines
1.4 KiB
TypeScript

import { NextFunction } from "express";
import { IWorkLenzRequest } from "../../interfaces/worklenz-request";
import { IWorkLenzResponse } from "../../interfaces/worklenz-response";
import { ServerResponse } from "../../models/server-response";
import { getFreePlanSettings, getUsedStorage } from "../../shared/paddle-utils";
import { megabytesToBytes } from "../../shared/utils";
export default async function (req: IWorkLenzRequest, res: IWorkLenzResponse, next: NextFunction): Promise<IWorkLenzResponse | void> {
const { file, file_name, project_id, size } = req.body;
if (!file || !file_name || !project_id || !size)
return res.status(200).send(new ServerResponse(false, null, "Upload failed"));
if (size > 5.243e+7)
return res.status(200).send(new ServerResponse(false, null, "Max file size for attachments is 50 MB.").withTitle("Upload failed!"));
if (req.user?.subscription_status === "free" && req.user?.owner_id) {
const limits = await getFreePlanSettings();
const usedStorage = await getUsedStorage(req.user?.owner_id);
if ((parseInt(usedStorage) + size) > megabytesToBytes(parseInt(limits.free_tier_storage))) {
return res.status(200).send(new ServerResponse(false, [], `Sorry, the free plan cannot exceed ${limits.free_tier_storage}MB of storage.`));
}
}
req.body.type = file_name.split(".").pop();
req.body.task_id = req.body.task_id || null;
return next();
}