{"version":3,"file":"single-types.mjs","sources":["../../../server/src/controllers/single-types.ts"],"sourcesContent":["import type { UID, Modules } from '@strapi/types';\nimport { setCreatorFields, async, errors } from '@strapi/utils';\n\nimport { getDocumentLocaleAndStatus } from './validation/dimensions';\nimport { getService } from '../utils';\nimport { formatDocumentWithMetadata } from './utils/metadata';\n\ntype OptionsWithPopulate = Modules.Documents.Params.Pick<UID.ContentType, 'populate:object'>;\n\nconst buildPopulateFromQuery = async (query: any, model: any) => {\n  return getService('populate-builder')(model)\n    .populateFromQuery(query)\n    .populateDeep(Infinity)\n    .countRelations()\n    .build();\n};\n\nconst findDocument = async (query: any, uid: UID.SingleType, opts: any = {}) => {\n  const documentManager = getService('document-manager');\n  const populate = await buildPopulateFromQuery(query, uid);\n\n  return (\n    documentManager\n      .findMany({ ...opts, populate }, uid)\n      // Return the first document found\n      .then((documents: any) => documents[0])\n  );\n};\n\nconst createOrUpdateDocument = async (ctx: any, opts?: OptionsWithPopulate) => {\n  const { user, userAbility } = ctx.state;\n  const { model } = ctx.params;\n  const { body, query } = ctx.request;\n\n  const documentManager = getService('document-manager');\n  const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n  if (permissionChecker.cannot.create() && permissionChecker.cannot.update()) {\n    throw new errors.ForbiddenError();\n  }\n\n  const sanitizedQuery = await permissionChecker.sanitizedQuery.update(query);\n\n  const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n  // Load document version to update\n  const [documentVersion, otherDocumentVersion] = await Promise.all([\n    findDocument(sanitizedQuery, model, { locale, status: 'draft' }),\n    // Find the first document to check if it exists\n    strapi.db.query(model).findOne({ select: ['documentId'] }),\n  ]);\n\n  const documentId = otherDocumentVersion?.documentId;\n\n  const pickPermittedFields = documentVersion\n    ? permissionChecker.sanitizeUpdateInput(documentVersion)\n    : permissionChecker.sanitizeCreateInput;\n\n  const setCreator = documentVersion\n    ? setCreatorFields({ user, isEdition: true })\n    : setCreatorFields({ user });\n\n  const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any);\n\n  // If version is not found, but document exists,\n  // the intent is to create a new document locale\n  if (documentVersion) {\n    if (permissionChecker.cannot.update(documentVersion)) {\n      throw new errors.ForbiddenError();\n    }\n  } else if (permissionChecker.cannot.create()) {\n    throw new errors.ForbiddenError();\n  }\n\n  const sanitizedBody = await sanitizeFn(body);\n\n  if (!documentId) {\n    return documentManager.create(model, {\n      data: sanitizedBody,\n      ...sanitizedQuery,\n      locale,\n    });\n  }\n\n  return documentManager.update(documentId, model, {\n    data: sanitizedBody as any,\n    populate: opts?.populate,\n    locale,\n  });\n};\n\nexport default {\n  async find(ctx: any) {\n    const { userAbility } = ctx.state;\n    const { model } = ctx.params;\n    const { query = {} } = ctx.request;\n\n    const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n    if (permissionChecker.cannot.read()) {\n      return ctx.forbidden();\n    }\n\n    const permissionQuery = await permissionChecker.sanitizedQuery.read(query);\n    const { locale, status } = await getDocumentLocaleAndStatus(query, model);\n\n    const version = await findDocument(permissionQuery, model, { locale, status });\n\n    // allow user with create permission to know a single type is not created\n    if (!version) {\n      if (permissionChecker.cannot.create()) {\n        return ctx.forbidden();\n      }\n      // Check if document exists\n      const document = await strapi.db.query(model).findOne({});\n\n      if (!document) {\n        return ctx.notFound();\n      }\n\n      // If the requested locale doesn't exist, return an empty response\n      const { meta } = await formatDocumentWithMetadata(\n        permissionChecker,\n        model,\n        // @ts-expect-error - fix types\n        { documentId: document.documentId, locale, publishedAt: null },\n        { availableLocales: true, availableStatus: false }\n      );\n      ctx.body = { data: {}, meta };\n      return;\n    }\n\n    if (permissionChecker.cannot.read(version)) {\n      return ctx.forbidden();\n    }\n\n    const sanitizedDocument = await permissionChecker.sanitizeOutput(version);\n    ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n  },\n\n  async createOrUpdate(ctx: any) {\n    const { userAbility } = ctx.state;\n    const { model } = ctx.params;\n\n    const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n    const document = await createOrUpdateDocument(ctx);\n    const sanitizedDocument = await permissionChecker.sanitizeOutput(document);\n    ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n  },\n\n  async delete(ctx: any) {\n    const { userAbility } = ctx.state;\n    const { model } = ctx.params;\n    const { query = {} } = ctx.request;\n\n    const documentManager = getService('document-manager');\n    const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n    if (permissionChecker.cannot.delete()) {\n      return ctx.forbidden();\n    }\n\n    const sanitizedQuery = await permissionChecker.sanitizedQuery.delete(query);\n    const populate = await buildPopulateFromQuery(sanitizedQuery, model);\n\n    const { locale } = await getDocumentLocaleAndStatus(query, model);\n    const documentLocales = await documentManager.findLocales(undefined, model, {\n      populate,\n      locale,\n    });\n\n    if (documentLocales.length === 0) {\n      return ctx.notFound();\n    }\n\n    for (const document of documentLocales) {\n      if (permissionChecker.cannot.delete(document)) {\n        return ctx.forbidden();\n      }\n    }\n\n    const deletedEntity = await documentManager.delete(documentLocales.at(0).documentId, model, {\n      locale,\n    });\n\n    ctx.body = await permissionChecker.sanitizeOutput(deletedEntity);\n  },\n\n  async publish(ctx: any) {\n    const { userAbility } = ctx.state;\n    const { model } = ctx.params;\n    const { query = {} } = ctx.request;\n\n    const documentManager = getService('document-manager');\n    const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n    if (permissionChecker.cannot.publish()) {\n      return ctx.forbidden();\n    }\n\n    const publishedDocument = await strapi.db.transaction(async () => {\n      const sanitizedQuery = await permissionChecker.sanitizedQuery.publish(query);\n      const populate = await buildPopulateFromQuery(sanitizedQuery, model);\n      const document = await createOrUpdateDocument(ctx, { populate });\n\n      if (!document) {\n        throw new errors.NotFoundError();\n      }\n\n      if (permissionChecker.cannot.publish(document)) {\n        throw new errors.ForbiddenError();\n      }\n\n      const { locale } = await getDocumentLocaleAndStatus(document, model);\n      const publishResult = await documentManager.publish(document.documentId, model, { locale });\n\n      return publishResult.at(0);\n    });\n\n    const sanitizedDocument = await permissionChecker.sanitizeOutput(publishedDocument);\n    ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n  },\n\n  async unpublish(ctx: any) {\n    const { userAbility } = ctx.state;\n    const { model } = ctx.params;\n    const {\n      body: { discardDraft, ...body },\n      query = {},\n    } = ctx.request;\n\n    const documentManager = getService('document-manager');\n    const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n    if (permissionChecker.cannot.unpublish()) {\n      return ctx.forbidden();\n    }\n\n    if (discardDraft && permissionChecker.cannot.discard()) {\n      return ctx.forbidden();\n    }\n\n    const sanitizedQuery = await permissionChecker.sanitizedQuery.unpublish(query);\n    const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n    const document = await findDocument(sanitizedQuery, model, { locale });\n\n    if (!document) {\n      return ctx.notFound();\n    }\n\n    if (permissionChecker.cannot.unpublish(document)) {\n      return ctx.forbidden();\n    }\n\n    if (discardDraft && permissionChecker.cannot.discard(document)) {\n      return ctx.forbidden();\n    }\n\n    await strapi.db.transaction(async () => {\n      if (discardDraft) {\n        await documentManager.discardDraft(document.documentId, model, { locale });\n      }\n\n      ctx.body = await async.pipe(\n        (document) => documentManager.unpublish(document.documentId, model, { locale }),\n        permissionChecker.sanitizeOutput,\n        (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n      )(document);\n    });\n  },\n\n  async discard(ctx: any) {\n    const { userAbility } = ctx.state;\n    const { model } = ctx.params;\n    const { body, query = {} } = ctx.request;\n\n    const documentManager = getService('document-manager');\n    const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n    if (permissionChecker.cannot.discard()) {\n      return ctx.forbidden();\n    }\n\n    const sanitizedQuery = await permissionChecker.sanitizedQuery.discard(query);\n    const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n    const document = await findDocument(sanitizedQuery, model, { locale, status: 'published' });\n\n    // Can not discard a document that is not published\n    if (!document) {\n      return ctx.notFound();\n    }\n\n    if (permissionChecker.cannot.discard(document)) {\n      return ctx.forbidden();\n    }\n\n    ctx.body = await async.pipe(\n      (document) => documentManager.discardDraft(document.documentId, model, { locale }),\n      permissionChecker.sanitizeOutput,\n      (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n    )(document);\n  },\n\n  async countDraftRelations(ctx: any) {\n    const { userAbility } = ctx.state;\n    const { model } = ctx.params;\n    const { query } = ctx.request;\n    const documentManager = getService('document-manager');\n    const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n    const { locale } = await getDocumentLocaleAndStatus(query, model);\n\n    if (permissionChecker.cannot.read()) {\n      return ctx.forbidden();\n    }\n\n    const document = await findDocument({}, model);\n    if (!document) {\n      return ctx.notFound();\n    }\n\n    if (permissionChecker.cannot.read(document)) {\n      return ctx.forbidden();\n    }\n\n    const number = await documentManager.countDraftRelations(document.documentId, model, locale);\n\n    return {\n      data: number,\n    };\n  },\n};\n"],"names":["buildPopulateFromQuery","query","model","getService","populateFromQuery","populateDeep","Infinity","countRelations","build","findDocument","uid","opts","documentManager","populate","findMany","then","documents","createOrUpdateDocument","ctx","user","userAbility","state","params","body","request","permissionChecker","create","cannot","update","errors","ForbiddenError","sanitizedQuery","locale","getDocumentLocaleAndStatus","documentVersion","otherDocumentVersion","Promise","all","status","strapi","db","findOne","select","documentId","pickPermittedFields","sanitizeUpdateInput","sanitizeCreateInput","setCreator","setCreatorFields","isEdition","sanitizeFn","async","pipe","sanitizedBody","data","find","read","forbidden","permissionQuery","version","document","notFound","meta","formatDocumentWithMetadata","publishedAt","availableLocales","availableStatus","sanitizedDocument","sanitizeOutput","createOrUpdate","delete","documentLocales","findLocales","undefined","length","deletedEntity","at","publish","publishedDocument","transaction","NotFoundError","publishResult","unpublish","discardDraft","discard","countDraftRelations","number"],"mappings":"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"}