src/api/v2/projects/projectfiles/projectfiles.validator.tsmodified
import { NextFunction, Request, Response } from "express";
import { LoggerFactory } from "../../../../util/logger";
import {
  validateProjectId,
  validateString,
  validateUuidAndThrow,
} from "../../common.validator";

const logger = LoggerFactory("FilesValidator");

export const validateGetFileRequest = (
  req: Request,
  res: Response,
  next: NextFunction,
) => {
  const { projectId, fileReferenceId } = req.params;
  if (
    !validateProjectId(logger, projectId, res) ||
    !validateUuidAndThrow(logger, "fileReferenceId", fileReferenceId, res)
  )
    return;
  next();
};

export const validateBiggestFileRequest = (
  req: Request,
  res: Response,
  next: NextFunction,
) => {
  const { projectId } = req.params;
  if (!validateProjectId(logger, projectId, res)) return;
  next();
};

export const validateFileUploadRequest = (
  req: Request,
  res: Response,
  next: NextFunction,
) => {
  const { projectId } = req.params;

  if (!req.file) {
    return res
      .status(400)
      .json({
        code: "InvalidRequest",
        message: "No file provided for upload.",
      });
  }

  const { chunkIndex, totalChunks, fileName, xyzDisplayName, fileReferenceId } =
    req.body;

  if (
    !validateString(logger, "fileName", fileName, res) ||
    !validateString(logger, "xyzDisplayName", xyzDisplayName, res) ||
    !validateString(logger, "chunkIndex", chunkIndex, res) ||
    !validateString(logger, "totalChunks", totalChunks, res) ||
    !validateProjectId(logger, projectId, res)
  ) {
    return res;
  }

  if (Number.parseInt(chunkIndex) > 0 && !fileReferenceId) {
    return res.status(400).json({
      code: "InvalidRequest",
      message:
        "fileReferenceId must be provided for all chunks > 0 (returned in first chunk response).",
    });
  }

  next();
};