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..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 @@ -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(() => { @@ -170,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 ?? '', }; diff --git a/packages/server/esp/dsc/dscProvider.js b/packages/server/esp/dsc/dscProvider.js index c389f4e0..e70ba430 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 }) { @@ -98,6 +103,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.'); @@ -137,6 +146,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,