{"version":3,"file":"folder-file.mjs","sources":["../../../../../server/src/controllers/validation/admin/folder-file.ts"],"sourcesContent":["import { intersection, map, isEmpty } from 'lodash/fp';\nimport { yup, validateYupSchema } from '@strapi/utils';\nimport { FOLDER_MODEL_UID } from '../../../constants';\nimport { folderExists } from './utils';\nimport { isFolderOrChild } from '../../utils/folders';\n\nimport type { Folder } from '../../../types';\n\nconst validateDeleteManyFoldersFilesSchema = yup\n  .object()\n  .shape({\n    fileIds: yup.array().of(yup.strapiID().required()),\n    folderIds: yup.array().of(yup.strapiID().required()),\n  })\n  .noUnknown()\n  .required();\n\nconst validateStructureMoveManyFoldersFilesSchema = yup\n  .object()\n  .shape({\n    destinationFolderId: yup\n      .strapiID()\n      .nullable()\n      .defined()\n      .test('folder-exists', 'destination folder does not exist', folderExists),\n    fileIds: yup.array().of(yup.strapiID().required()),\n    folderIds: yup.array().of(yup.strapiID().required()),\n  })\n  .noUnknown()\n  .required();\n\nconst validateDuplicatesMoveManyFoldersFilesSchema = yup\n  .object()\n  .test('are-folders-unique', 'some folders already exist', async function areFoldersUnique(value) {\n    const { folderIds, destinationFolderId } = value;\n    if (isEmpty(folderIds)) return true;\n\n    const folders = await strapi.db.query(FOLDER_MODEL_UID).findMany({\n      select: ['name'],\n      where: { id: { $in: folderIds } },\n    });\n\n    const existingFolders = await strapi.db.query(FOLDER_MODEL_UID).findMany({\n      select: ['name'],\n      where: { parent: { id: destinationFolderId } },\n    });\n\n    const duplicatedNames = intersection(map('name', folders), map('name', existingFolders));\n    if (duplicatedNames.length > 0) {\n      return this.createError({\n        message: `some folders already exists: ${duplicatedNames.join(', ')}`,\n      });\n    }\n\n    return true;\n  });\n\nconst validateMoveFoldersNotInsideThemselvesSchema = yup\n  .object()\n  .test(\n    'dont-move-inside-self',\n    'folders cannot be moved inside themselves or one of its children',\n    async function validateMoveFoldersNotInsideThemselves(value) {\n      const { folderIds, destinationFolderId } = value;\n      if (destinationFolderId === null || isEmpty(folderIds)) return true;\n\n      const destinationFolder = await strapi.db.query(FOLDER_MODEL_UID).findOne({\n        select: ['path'],\n        where: { id: destinationFolderId },\n      });\n\n      const folders: Folder[] = await strapi.db.query(FOLDER_MODEL_UID).findMany({\n        select: ['name', 'path'],\n        where: { id: { $in: folderIds } },\n      });\n\n      const unmovableFoldersNames = folders\n        .filter((folder) => isFolderOrChild(destinationFolder, folder))\n        .map((f) => f.name);\n\n      if (unmovableFoldersNames.length > 0) {\n        return this.createError({\n          message: `folders cannot be moved inside themselves or one of its children: ${unmovableFoldersNames.join(\n            ', '\n          )}`,\n        });\n      }\n\n      return true;\n    }\n  );\n\nexport const validateDeleteManyFoldersFiles = validateYupSchema(\n  validateDeleteManyFoldersFilesSchema\n);\n\nexport async function validateMoveManyFoldersFiles(body: unknown) {\n  await validateYupSchema(validateStructureMoveManyFoldersFilesSchema)(body);\n  await validateYupSchema(validateDuplicatesMoveManyFoldersFilesSchema)(body);\n  await validateYupSchema(validateMoveFoldersNotInsideThemselvesSchema)(body);\n}\n"],"names":["validateDeleteManyFoldersFilesSchema","yup","object","shape","fileIds","array","of","strapiID","required","folderIds","noUnknown","validateStructureMoveManyFoldersFilesSchema","destinationFolderId","nullable","defined","test","folderExists","validateDuplicatesMoveManyFoldersFilesSchema","areFoldersUnique","value","isEmpty","folders","strapi","db","query","FOLDER_MODEL_UID","findMany","select","where","id","$in","existingFolders","parent","duplicatedNames","intersection","map","length","createError","message","join","validateMoveFoldersNotInsideThemselvesSchema","validateMoveFoldersNotInsideThemselves","destinationFolder","findOne","unmovableFoldersNames","filter","folder","isFolderOrChild","f","name","validateDeleteManyFoldersFiles","validateYupSchema","validateMoveManyFoldersFiles","body"],"mappings":"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"}