{"version":3,"file":"assignees.mjs","sources":["../../../server/src/services/assignees.ts"],"sourcesContent":["import type { Core, UID, Modules } from '@strapi/types';\nimport { errors } from '@strapi/utils';\nimport { isNil } from 'lodash/fp';\nimport { ENTITY_ASSIGNEE_ATTRIBUTE } from '../constants/workflows';\nimport { getService, getAdminService } from '../utils';\n\nconst { ApplicationError } = errors;\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n  const metrics = getService('workflow-metrics', { strapi });\n\n  return {\n    async findEntityAssigneeId(id: string | number, model: UID.ContentType) {\n      const entity = await strapi.db.query(model).findOne({\n        where: { id },\n        populate: [ENTITY_ASSIGNEE_ATTRIBUTE],\n        select: [],\n      });\n\n      return entity?.[ENTITY_ASSIGNEE_ATTRIBUTE]?.id ?? null;\n    },\n\n    /**\n     * Update the assignee of an entity\n     */\n    async updateEntityAssignee(\n      entityToUpdate: {\n        id: number | string;\n        documentId: string;\n        locale: string;\n        updatedAt: string;\n      },\n      model: UID.ContentType,\n      assigneeId: string | null\n    ) {\n      const { documentId, locale } = entityToUpdate;\n\n      if (!isNil(assigneeId)) {\n        const userExists = await getAdminService('user', { strapi }).exists({ id: assigneeId });\n\n        if (!userExists) {\n          throw new ApplicationError(`Selected user does not exist`);\n        }\n      }\n\n      const oldAssigneeId = await this.findEntityAssigneeId(entityToUpdate.id, model);\n      metrics.sendDidEditAssignee(oldAssigneeId, assigneeId || null);\n\n      const entity = await strapi.documents(model).update({\n        documentId,\n        locale,\n        data: { [ENTITY_ASSIGNEE_ATTRIBUTE]: assigneeId || null },\n        populate: [ENTITY_ASSIGNEE_ATTRIBUTE],\n        fields: [],\n      });\n\n      // Update the `updated_at` field of the entity, so that the `status` is not considered `Modified`\n      // NOTE: `updatedAt` is a protected attribute that can not be modified directly from the query layer\n      //        hence the knex query builder is used here.\n      const { tableName } = strapi.db.metadata.get(model);\n      await strapi.db\n        .connection(tableName)\n        .where({ id: entityToUpdate.id })\n        .update({\n          updated_at: new Date(entityToUpdate.updatedAt),\n        });\n\n      return entity;\n    },\n  };\n};\n"],"names":["ApplicationError","errors","strapi","metrics","getService","findEntityAssigneeId","id","model","entity","db","query","findOne","where","populate","ENTITY_ASSIGNEE_ATTRIBUTE","select","updateEntityAssignee","entityToUpdate","assigneeId","documentId","locale","isNil","userExists","getAdminService","exists","oldAssigneeId","sendDidEditAssignee","documents","update","data","fields","tableName","metadata","get","connection","updated_at","Date","updatedAt"],"mappings":";;;;;AAMA,MAAM,EAAEA,gBAAgB,EAAE,GAAGC,MAAAA;AAE7B,gBAAe,CAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;IACjD,MAAMC,OAAAA,GAAUC,WAAW,kBAAA,EAAoB;AAAEF,QAAAA;AAAO,KAAA,CAAA;IAExD,OAAO;QACL,MAAMG,oBAAAA,CAAAA,CAAqBC,EAAmB,EAAEC,KAAsB,EAAA;YACpE,MAAMC,MAAAA,GAAS,MAAMN,MAAAA,CAAOO,EAAE,CAACC,KAAK,CAACH,KAAAA,CAAAA,CAAOI,OAAO,CAAC;gBAClDC,KAAAA,EAAO;AAAEN,oBAAAA;AAAG,iBAAA;gBACZO,QAAAA,EAAU;AAACC,oBAAAA;AAA0B,iBAAA;AACrCC,gBAAAA,MAAAA,EAAQ;AACV,aAAA,CAAA;AAEA,YAAA,OAAOP,MAAAA,GAASM,yBAAAA,CAA0B,EAAER,EAAAA,IAAM,IAAA;AACpD,QAAA,CAAA;AAEA;;AAEC,QACD,MAAMU,oBAAAA,CAAAA,CACJC,cAKC,EACDV,KAAsB,EACtBW,UAAyB,EAAA;AAEzB,YAAA,MAAM,EAAEC,UAAU,EAAEC,MAAM,EAAE,GAAGH,cAAAA;YAE/B,IAAI,CAACI,MAAMH,UAAAA,CAAAA,EAAa;gBACtB,MAAMI,UAAAA,GAAa,MAAMC,eAAAA,CAAgB,MAAA,EAAQ;AAAErB,oBAAAA;AAAO,iBAAA,CAAA,CAAGsB,MAAM,CAAC;oBAAElB,EAAAA,EAAIY;AAAW,iBAAA,CAAA;AAErF,gBAAA,IAAI,CAACI,UAAAA,EAAY;AACf,oBAAA,MAAM,IAAItB,gBAAAA,CAAiB,CAAC,4BAA4B,CAAC,CAAA;AAC3D,gBAAA;AACF,YAAA;YAEA,MAAMyB,aAAAA,GAAgB,MAAM,IAAI,CAACpB,oBAAoB,CAACY,cAAAA,CAAeX,EAAE,EAAEC,KAAAA,CAAAA;YACzEJ,OAAAA,CAAQuB,mBAAmB,CAACD,aAAAA,EAAeP,UAAAA,IAAc,IAAA,CAAA;AAEzD,YAAA,MAAMV,SAAS,MAAMN,MAAAA,CAAOyB,SAAS,CAACpB,KAAAA,CAAAA,CAAOqB,MAAM,CAAC;AAClDT,gBAAAA,UAAAA;AACAC,gBAAAA,MAAAA;gBACAS,IAAAA,EAAM;oBAAE,CAACf,yBAAAA,GAA4BI,UAAAA,IAAc;AAAK,iBAAA;gBACxDL,QAAAA,EAAU;AAACC,oBAAAA;AAA0B,iBAAA;AACrCgB,gBAAAA,MAAAA,EAAQ;AACV,aAAA,CAAA;;;;YAKA,MAAM,EAAEC,SAAS,EAAE,GAAG7B,MAAAA,CAAOO,EAAE,CAACuB,QAAQ,CAACC,GAAG,CAAC1B,KAAAA,CAAAA;AAC7C,YAAA,MAAML,OAAOO,EAAE,CACZyB,UAAU,CAACH,SAAAA,CAAAA,CACXnB,KAAK,CAAC;AAAEN,gBAAAA,EAAAA,EAAIW,eAAeX;AAAG,aAAA,CAAA,CAC9BsB,MAAM,CAAC;gBACNO,UAAAA,EAAY,IAAIC,IAAAA,CAAKnB,cAAAA,CAAeoB,SAAS;AAC/C,aAAA,CAAA;YAEF,OAAO7B,MAAAA;AACT,QAAA;AACF,KAAA;AACF,CAAA;;;;"}