{"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,kBAAoB,EAAA;AAAEF,QAAAA;AAAO,KAAA,CAAA;IAExD,OAAO;QACL,MAAMG,oBAAAA,CAAAA,CAAqBC,EAAmB,EAAEC,KAAsB,EAAA;YACpE,MAAMC,MAAAA,GAAS,MAAMN,MAAOO,CAAAA,EAAE,CAACC,KAAK,CAACH,KAAOI,CAAAA,CAAAA,OAAO,CAAC;gBAClDC,KAAO,EAAA;AAAEN,oBAAAA;AAAG,iBAAA;gBACZO,QAAU,EAAA;AAACC,oBAAAA;AAA0B,iBAAA;AACrCC,gBAAAA,MAAAA,EAAQ;AACV,aAAA,CAAA;AAEA,YAAA,OAAOP,MAAQ,GAACM,yBAA0B,CAAA,EAAER,EAAM,IAAA,IAAA;AACpD,SAAA;AAEA;;AAEC,QACD,MAAMU,oBACJC,CAAAA,CAAAA,cAKC,EACDV,KAAsB,EACtBW,UAAyB,EAAA;AAEzB,YAAA,MAAM,EAAEC,UAAU,EAAEC,MAAM,EAAE,GAAGH,cAAAA;YAE/B,IAAI,CAACI,MAAMH,UAAa,CAAA,EAAA;gBACtB,MAAMI,UAAAA,GAAa,MAAMC,eAAAA,CAAgB,MAAQ,EAAA;AAAErB,oBAAAA;AAAO,iBAAA,CAAA,CAAGsB,MAAM,CAAC;oBAAElB,EAAIY,EAAAA;AAAW,iBAAA,CAAA;AAErF,gBAAA,IAAI,CAACI,UAAY,EAAA;AACf,oBAAA,MAAM,IAAItB,gBAAAA,CAAiB,CAAC,4BAA4B,CAAC,CAAA;AAC3D;AACF;YAEA,MAAMyB,aAAAA,GAAgB,MAAM,IAAI,CAACpB,oBAAoB,CAACY,cAAAA,CAAeX,EAAE,EAAEC,KAAAA,CAAAA;YACzEJ,OAAQuB,CAAAA,mBAAmB,CAACD,aAAAA,EAAeP,UAAc,IAAA,IAAA,CAAA;AAEzD,YAAA,MAAMV,SAAS,MAAMN,MAAAA,CAAOyB,SAAS,CAACpB,KAAAA,CAAAA,CAAOqB,MAAM,CAAC;AAClDT,gBAAAA,UAAAA;AACAC,gBAAAA,MAAAA;gBACAS,IAAM,EAAA;oBAAE,CAACf,yBAAAA,GAA4BI,UAAc,IAAA;AAAK,iBAAA;gBACxDL,QAAU,EAAA;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,UAAY,EAAA,IAAIC,IAAKnB,CAAAA,cAAAA,CAAeoB,SAAS;AAC/C,aAAA,CAAA;YAEF,OAAO7B,MAAAA;AACT;AACF,KAAA;AACF,CAAA;;;;"}