From 0f15960636fa26c723e6ef7a3e1e9696c20dcc5d Mon Sep 17 00:00:00 2001 From: Jamie Howard Date: Thu, 8 Jun 2023 12:39:52 +0100 Subject: [PATCH] feature(ee): emit workflow stage change webhook event --- .../admin/ee/server/constants/webhookEvents.js | 5 +++++ .../review-workflows/entity-service-decorator.js | 14 +++++++++++++- .../services/review-workflows/review-workflows.js | 5 ++++- 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 packages/core/admin/ee/server/constants/webhookEvents.js diff --git a/packages/core/admin/ee/server/constants/webhookEvents.js b/packages/core/admin/ee/server/constants/webhookEvents.js new file mode 100644 index 0000000000..69e2acd231 --- /dev/null +++ b/packages/core/admin/ee/server/constants/webhookEvents.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = { + WORKFLOW_UPDATE_STAGE: 'workflow.updateEntryStage', +}; diff --git a/packages/core/admin/ee/server/services/review-workflows/entity-service-decorator.js b/packages/core/admin/ee/server/services/review-workflows/entity-service-decorator.js index 3fd52fe4e1..660cdaf760 100644 --- a/packages/core/admin/ee/server/services/review-workflows/entity-service-decorator.js +++ b/packages/core/admin/ee/server/services/review-workflows/entity-service-decorator.js @@ -2,6 +2,7 @@ const { isNil, isNull } = require('lodash/fp'); const { ENTITY_STAGE_ATTRIBUTE } = require('../../constants/workflows'); +const { WORKFLOW_UPDATE_STAGE } = require('../../constants/webhookEvents'); const { hasReviewWorkflow, getDefaultWorkflow } = require('../../utils/review-workflows'); /** @@ -45,7 +46,18 @@ const decorator = (service) => ({ delete data[ENTITY_STAGE_ATTRIBUTE]; } - return service.update.call(this, uid, entityId, { ...opts, data }); + const entity = await service.findOne.call(this, uid, entityId, { + populate: [ENTITY_STAGE_ATTRIBUTE], + }); + const previousStageId = entity?.[ENTITY_STAGE_ATTRIBUTE]?.id ?? null; + + const updatedEntity = await service.update.call(this, uid, entityId, { ...opts, data }); + + if (previousStageId && previousStageId !== data[ENTITY_STAGE_ATTRIBUTE]) { + await service.emitEvent.call(this, uid, WORKFLOW_UPDATE_STAGE, updatedEntity); + } + + return updatedEntity; }, }); diff --git a/packages/core/admin/ee/server/services/review-workflows/review-workflows.js b/packages/core/admin/ee/server/services/review-workflows/review-workflows.js index 15b1913e5f..7a6304bfb5 100644 --- a/packages/core/admin/ee/server/services/review-workflows/review-workflows.js +++ b/packages/core/admin/ee/server/services/review-workflows/review-workflows.js @@ -11,6 +11,7 @@ const { ENTITY_STAGE_ATTRIBUTE } = require('../../constants/workflows'); const { getDefaultWorkflow } = require('../../utils/review-workflows'); const { persistTables, removePersistedTablesWithSuffix } = require('../../utils/persisted-tables'); +const webhookEvents = require('../../constants/webhookEvents'); async function initDefaultWorkflow({ workflowsService, stagesService, strapi }) { const wfCount = await workflowsService.count(); @@ -109,7 +110,9 @@ function persistStagesJoinTables({ strapi }) { } const registerWebhookEvents = async ({ strapi }) => - strapi.webhookStore.addAllowedEvent('WORKFLOW_UPDATE_STAGE', 'workflow.updateEntryStage'); + Object.entries(webhookEvents).forEach(([eventKey, event]) => + strapi.webhookStore.addAllowedEvent(eventKey, event) + ); module.exports = ({ strapi }) => { const workflowsService = getService('workflows', { strapi });