{"version":3,"file":"index.mjs","sources":["../../../src/services/entity-service/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport delegate from 'delegates';\nimport { errors as databaseErrors } from '@strapi/database';\nimport {\n  contentTypes as contentTypesUtils,\n  errors,\n  relations as relationUtils,\n} from '@strapi/utils';\nimport type { Database } from '@strapi/database';\nimport type { Core, Modules, Utils } from '@strapi/types';\n\ntype Decoratable<T> = T & {\n  decorate(\n    decorator: (old: Modules.EntityService.EntityService) => Modules.EntityService.EntityService & {\n      [key: string]: unknown;\n    }\n  ): void;\n};\n\nconst transformLoadParamsToQuery = (\n  uid: string,\n  field: string,\n  params: Record<string, unknown>,\n  pagination = {}\n) => {\n  const query = strapi\n    .get('query-params')\n    .transform(uid, { populate: { [field]: params } as any }) as any;\n\n  const res = {\n    ...query.populate[field],\n    ...pagination,\n  };\n\n  return res;\n};\n\nconst databaseErrorsToTransform = [\n  databaseErrors.InvalidTimeError,\n  databaseErrors.InvalidDateTimeError,\n  databaseErrors.InvalidDateError,\n  databaseErrors.InvalidRelationError,\n];\n\nconst createDefaultImplementation = ({\n  strapi,\n  db,\n}: {\n  strapi: Core.Strapi;\n  db: Database;\n}): Modules.EntityService.EntityService => ({\n  async wrapParams(options: any = {}) {\n    return options;\n  },\n\n  async wrapResult(result: any = {}) {\n    return result;\n  },\n\n  async findMany(uid, opts) {\n    const { kind } = strapi.getModel(uid);\n\n    const wrappedParams = await this.wrapParams(opts, { uid, action: 'findMany' });\n\n    if (kind === 'singleType') {\n      const entity = strapi.documents!(uid).findFirst(wrappedParams);\n      return this.wrapResult(entity, { uid, action: 'findOne' });\n    }\n\n    const entities = await strapi.documents!(uid).findMany(wrappedParams);\n    return this.wrapResult(entities, { uid, action: 'findMany' });\n  },\n\n  async findPage(uid, opts) {\n    const wrappedParams = await this.wrapParams(opts, { uid, action: 'findPage' });\n\n    const query = strapi.get('query-params').transform(uid, wrappedParams);\n\n    const entities = await db.query(uid).findPage(query);\n    return this.wrapResult(entities, { uid, action: 'findMany' });\n  },\n\n  async findOne(uid, entityId, opts) {\n    const wrappedParams = await this.wrapParams(opts, { uid, action: 'findOne' });\n\n    const res = await db.query(uid).findOne({ where: { id: entityId } });\n\n    if (!res) {\n      return this.wrapResult(null, { uid, action: 'findOne' });\n    }\n\n    const entity = await strapi.documents!(uid).findOne({\n      ...wrappedParams,\n      documentId: res.documentId,\n    });\n    return this.wrapResult(entity, { uid, action: 'findOne' });\n  },\n\n  async count(uid, opts) {\n    const wrappedParams = await this.wrapParams(opts, { uid, action: 'count' });\n\n    return strapi.documents!(uid).count(wrappedParams);\n  },\n\n  async create(uid, params) {\n    const wrappedParams = await this.wrapParams<\n      Modules.EntityService.Params.Pick<typeof uid, 'data' | 'fields' | 'populate'>\n    >(params, { uid, action: 'create' });\n    const { data } = wrappedParams;\n\n    if (!data) {\n      throw new Error('cannot create');\n    }\n\n    const shouldPublish = !contentTypesUtils.isDraft(data, strapi.getModel(uid));\n\n    const entity = await strapi.documents!(uid).create({\n      ...(wrappedParams as any),\n      status: shouldPublish ? 'published' : 'draft',\n    });\n\n    return this.wrapResult(entity, { uid, action: 'create' });\n  },\n\n  async update(uid, entityId, opts) {\n    const wrappedParams = await this.wrapParams<\n      Modules.EntityService.Params.Pick<typeof uid, 'data:partial' | 'fields' | 'populate'>\n    >(opts, {\n      uid,\n      action: 'update',\n    });\n    const entityToUpdate = await db.query(uid).findOne({ where: { id: entityId } });\n\n    if (!entityToUpdate) {\n      return this.wrapResult(null, { uid, action: 'update' });\n    }\n\n    const shouldPublish = !contentTypesUtils.isDraft(entityToUpdate, strapi.getModel(uid));\n\n    const entity = strapi.documents!(uid).update({\n      ...(wrappedParams as any),\n      status: shouldPublish ? 'published' : 'draft',\n      documentId: entityToUpdate.documentId,\n    });\n\n    return this.wrapResult(entity, { uid, action: 'update' });\n  },\n\n  async delete(uid, entityId, opts) {\n    const wrappedParams = await this.wrapParams(opts, { uid, action: 'delete' });\n\n    const entityToDelete = await db.query(uid).findOne({ where: { id: entityId } });\n\n    if (!entityToDelete) {\n      return this.wrapResult(null, { uid, action: 'delete' });\n    }\n\n    await strapi.documents!(uid).delete({\n      ...wrappedParams,\n      documentId: entityToDelete.documentId,\n    });\n\n    return this.wrapResult(entityToDelete, { uid, action: 'delete' });\n  },\n\n  async load(uid, entity, field, params) {\n    if (!_.isString(field)) {\n      throw new Error(`Invalid load. Expected \"${field}\" to be a string`);\n    }\n\n    const loadedEntity = await db\n      .query(uid)\n      .load(entity, field, transformLoadParamsToQuery(uid, field, params ?? {}));\n\n    return this.wrapResult(loadedEntity, { uid, field, action: 'load' });\n  },\n\n  async loadPages(uid, entity, field, params, pagination = {}) {\n    if (!_.isString(field)) {\n      throw new Error(`Invalid load. Expected \"${field}\" to be a string`);\n    }\n\n    const { attributes } = strapi.getModel(uid);\n    const attribute = attributes[field];\n\n    if (!relationUtils.isAnyToMany(attribute)) {\n      throw new Error(`Invalid load. Expected \"${field}\" to be an anyToMany relational attribute`);\n    }\n\n    const query = transformLoadParamsToQuery(uid, field, params ?? {}, pagination);\n\n    const loadedPage = await db.query(uid).loadPages(entity, field, query);\n\n    return {\n      ...loadedPage,\n      results: await this.wrapResult(loadedPage.results, { uid, field, action: 'load' }),\n    };\n  },\n});\n\nexport default (ctx: {\n  strapi: Core.Strapi;\n  db: Database;\n}): Decoratable<Modules.EntityService.EntityService> => {\n  const implementation = createDefaultImplementation(ctx);\n\n  const service = {\n    implementation,\n    decorate<T extends object>(decorator: (current: typeof implementation) => T) {\n      if (typeof decorator !== 'function') {\n        throw new Error(`Decorator must be a function, received ${typeof decorator}`);\n      }\n\n      this.implementation = { ...this.implementation, ...decorator(this.implementation) };\n      return this;\n    },\n  };\n\n  const delegator = delegate(service, 'implementation');\n\n  // delegate every method in implementation\n  Object.keys(service.implementation).forEach((key) => delegator.method(key));\n\n  // wrap methods to handle Database Errors\n  service.decorate((oldService: Modules.EntityService.EntityService) => {\n    const newService = _.mapValues(\n      oldService,\n      (method, methodName: keyof Modules.EntityService.EntityService) =>\n        async function (this: Modules.EntityService.EntityService, ...args: []) {\n          try {\n            return await (oldService[methodName] as Utils.Function.AnyPromise).call(this, ...args);\n          } catch (error) {\n            if (\n              databaseErrorsToTransform.some(\n                (errorToTransform) => error instanceof errorToTransform\n              )\n            ) {\n              if (error instanceof Error) {\n                throw new errors.ValidationError(error.message);\n              }\n\n              throw error;\n            }\n            throw error;\n          }\n        }\n    );\n\n    return newService;\n  });\n\n  return service as unknown as Decoratable<Modules.EntityService.EntityService>;\n};\n"],"names":["transformLoadParamsToQuery","uid","field","params","pagination","query","strapi","get","transform","populate","res","databaseErrorsToTransform","databaseErrors","InvalidTimeError","InvalidDateTimeError","InvalidDateError","InvalidRelationError","createDefaultImplementation","db","wrapParams","options","wrapResult","result","findMany","opts","kind","getModel","wrappedParams","action","entity","documents","findFirst","entities","findPage","findOne","entityId","where","id","documentId","count","create","data","Error","shouldPublish","contentTypesUtils","isDraft","status","update","entityToUpdate","delete","entityToDelete","load","_","isString","loadedEntity","loadPages","attributes","attribute","relationUtils","isAnyToMany","loadedPage","results","ctx","implementation","service","decorate","decorator","delegator","delegate","Object","keys","forEach","key","method","oldService","newService","mapValues","methodName","args","call","error","some","errorToTransform","errors","ValidationError","message"],"mappings":"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"}