diff --git a/src/newsletter/newsletter.controller.ts b/src/newsletter/newsletter.controller.ts index 0d28fb0c46dfc657d75d5b670d90015d568c0344..68800a6eda64ceddd7a35b24c70a7c0b45f81ac6 100644 --- a/src/newsletter/newsletter.controller.ts +++ b/src/newsletter/newsletter.controller.ts @@ -9,7 +9,7 @@ export class NewsletterController { @Get() public async findOne(@Query('email') email: string) { - return this.newsletterService.findOne(email); + return this.newsletterService.findNewsletterSubscription(email); } @Post('subscribe') diff --git a/src/newsletter/newsletter.service.ts b/src/newsletter/newsletter.service.ts index 4d44ac9441880c1978cf9219fde5b899f551b72c..1af9ef47bd2bd5b9dbe987d54ae7cbb86e82a6c5 100644 --- a/src/newsletter/newsletter.service.ts +++ b/src/newsletter/newsletter.service.ts @@ -102,6 +102,21 @@ export class NewsletterService { return newsletterSubscription; } + public async findNewsletterSubscription(email: string): Promise<object> { + try { + // The actual subscription info is in mailchimp, we actually don't need to maintain a mapping in newsletterSubscription : cf. https://mailchimp.com/developer/marketing/docs/methods-parameters/#path-parameters + const mailchimpUser = await mailchimp.lists.getListMember(this.LIST_ID, md5(email)); + return mailchimpUser.status === 'unsubscribed' ? null : { email }; + } catch (e) { + if (e.status === 404) { + return null; + } else { + this.logger.error(`findNewsletterSubscription: ${e.status} - ${e}`); + throw new HttpException('find Newsletter Subscription', HttpStatus.INTERNAL_SERVER_ERROR); + } + } + } + public async findOne(mail: string): Promise<INewsletterSubscription | undefined> { this.logger.debug('findOne'); return this.newsletterSubscriptionModel.findOne({ email: mail }).exec();