From 57d8cadd721bdaa38d6541cfe10fb36c79ccc696 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20TATOUD?= Date: Fri, 17 May 2024 10:49:37 +0200 Subject: [PATCH 1/3] fix: Throw conflict error in campaing creation --- packages/server/esp/dsc/dscProvider.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/server/esp/dsc/dscProvider.js b/packages/server/esp/dsc/dscProvider.js index 050180b1..94ebf894 100644 --- a/packages/server/esp/dsc/dscProvider.js +++ b/packages/server/esp/dsc/dscProvider.js @@ -85,6 +85,10 @@ class DscProvider { throw new BadRequest(message); } + if (status === 409) { + throw new Conflict(message); + } + // Log the error and throw a generic error if it doesn't match specific cases logger.error('Error in API call:', error); throw new Error('An error occurred while communicating with the API.'); From 9e9e0911036fefc06ef5263b2c9fa2cfe470af03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20TATOUD?= Date: Fri, 17 May 2024 10:59:42 +0200 Subject: [PATCH 2/3] fix: switch to creation when campaign not found on dsc --- .../src/js/vue/components/esp/esp-send-mail.js | 12 ++++++++++++ packages/server/esp/dsc/dscProvider.js | 11 ++++++++++- packages/server/profile/profile.service.js | 8 +++++++- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/packages/editor/src/js/vue/components/esp/esp-send-mail.js b/packages/editor/src/js/vue/components/esp/esp-send-mail.js index 51379ee4..e428c63f 100644 --- a/packages/editor/src/js/vue/components/esp/esp-send-mail.js +++ b/packages/editor/src/js/vue/components/esp/esp-send-mail.js @@ -114,6 +114,18 @@ const EspComponent = Vue.component('EspForm', { .catch((error) => { // handle error console.log(error); + + /* + If the campaign for this profile should exist but was not found on DSC, + Then it was probably deleted on DSC's side. + So we allow the user to create a new one + */ + if(error.response.status === 404) { + this.type = SEND_MODE.CREATION; + this.fetchProfileData(message); + return; + } + this.vm.notifier.error(this.vm.t('error-server')); }) .finally(() => { diff --git a/packages/server/esp/dsc/dscProvider.js b/packages/server/esp/dsc/dscProvider.js index 94ebf894..ee0ae04e 100644 --- a/packages/server/esp/dsc/dscProvider.js +++ b/packages/server/esp/dsc/dscProvider.js @@ -4,7 +4,12 @@ const mailingService = require('../../mailing/mailing.service.js'); const ERROR_CODES = require('../../constant/error-codes.js'); const config = require('../../node.config.js'); const axios = require('../../config/axios'); -const { InternalServerError, Conflict, BadRequest } = require('http-errors'); +const { + InternalServerError, + Conflict, + BadRequest, + NotFound, +} = require('http-errors'); class DscProvider { constructor({ apiKey, ...data }) { @@ -128,6 +133,10 @@ class DscProvider { } catch (e) { logger.error({ error: e }); + if (e?.status === 404) { + throw new NotFound('Campaign not found on DSC'); + } + throw e; } } diff --git a/packages/server/profile/profile.service.js b/packages/server/profile/profile.service.js index 5d00c2b5..e30bc594 100644 --- a/packages/server/profile/profile.service.js +++ b/packages/server/profile/profile.service.js @@ -202,7 +202,13 @@ async function sendEspCampaign({ const { subject, campaignMailName, planification } = espSendingMailData; const profile = await findOne(profileId); - await checkIfMailAlreadySentToProfile({ profileId, mailingId }); + /* + For DSC, creating a new campaign from the same profile is allowed + if the campaign was deleted on DSC's side + */ + if (type !== 'DSC') { + await checkIfMailAlreadySentToProfile({ profileId, mailingId }); + } const { apiKey, From b992967d07bc185182027ad386b744847e3ff752 Mon Sep 17 00:00:00 2001 From: FlorianGille Date: Wed, 22 May 2024 08:57:01 +0200 Subject: [PATCH 3/3] fix: remove controlMail from editor (get controlMail from backend only) --- packages/editor/src/js/vue/components/esp/esp-send-mail.js | 1 - .../editor/src/js/vue/components/esp/providers/DscComponent.js | 3 --- 2 files changed, 4 deletions(-) diff --git a/packages/editor/src/js/vue/components/esp/esp-send-mail.js b/packages/editor/src/js/vue/components/esp/esp-send-mail.js index e428c63f..8386f01f 100644 --- a/packages/editor/src/js/vue/components/esp/esp-send-mail.js +++ b/packages/editor/src/js/vue/components/esp/esp-send-mail.js @@ -182,7 +182,6 @@ const EspComponent = Vue.component('EspForm', { campaignMailName: data?.campaignMailName, subject: data?.subject, planification: data?.planification, - controlMail: data?.controlMail, typeCampagne: data?.typeCampagne, }, }) diff --git a/packages/editor/src/js/vue/components/esp/providers/DscComponent.js b/packages/editor/src/js/vue/components/esp/providers/DscComponent.js index 2997eab4..198c79e3 100644 --- a/packages/editor/src/js/vue/components/esp/providers/DscComponent.js +++ b/packages/editor/src/js/vue/components/esp/providers/DscComponent.js @@ -29,7 +29,6 @@ const DscComponent = Vue.component('DscComponent', { campaignMailName: '', planification: '', subject: '', - controlMail: '', type: ESP_TYPE.DSC, }, style: styleHelper, @@ -47,12 +46,10 @@ const DscComponent = Vue.component('DscComponent', { id, additionalApiData: { planification, typeCampagne } = {}, } = this.fetchedProfile; - const controlMail = this.vm.currentUser().email; this.profile = { campaignMailName: campaignMailName ?? '', planification: planification ?? '', subject: subject ?? '', - controlMail, typeCampagne: typeCampagne ?? '', id: id ?? '', };