From 3c5b9fd2624ee401c8a2b6c62380b4485324d4d2 Mon Sep 17 00:00:00 2001 From: Suemayah Eldursi Date: Sun, 17 Jan 2021 17:34:16 +0000 Subject: [PATCH 1/2] #79 add methods in email service to fetch contact id and delete contact by id --- src/modules/email/email.service.ts | 32 +++++++++++++++++++ .../interfaces/sendgrid/contact.interface.ts | 4 +++ .../interfaces/sendgrid/response.interface.ts | 5 +++ .../sendgrid/searchResult.interface.ts | 6 ++++ 4 files changed, 47 insertions(+) create mode 100644 src/modules/email/interfaces/sendgrid/contact.interface.ts create mode 100644 src/modules/email/interfaces/sendgrid/response.interface.ts create mode 100644 src/modules/email/interfaces/sendgrid/searchResult.interface.ts diff --git a/src/modules/email/email.service.ts b/src/modules/email/email.service.ts index bb70857..249fcd1 100644 --- a/src/modules/email/email.service.ts +++ b/src/modules/email/email.service.ts @@ -57,4 +57,36 @@ export class EmailService { return await sgClient.request(request); } + + async getContactId(email: string): Promise { + const request = { + json: undefined, + method: 'POST', + url: '/v3/marketing/contacts/search', + body: JSON.stringify({ + query: `email = '${email}'`, + }), + }; + + const response: [ClientResponse, any] = await sgClient.request(request); + + if (response[0].statusCode == 200) { + const sendgridResponse: SendgridSearchResult = JSON.parse( + response[0].body, + ); + return sendgridResponse; + } + + Promise.resolve(null); + } + + async deleteContact(contactId: string) { + const request = { + json: undefined, + method: 'DELETE', + url: '/v3/marketing/contacts?ids=' + contactId, + }; + + const response: [ClientResponse, any] = await sgClient.request(request); + } } diff --git a/src/modules/email/interfaces/sendgrid/contact.interface.ts b/src/modules/email/interfaces/sendgrid/contact.interface.ts new file mode 100644 index 0000000..e618445 --- /dev/null +++ b/src/modules/email/interfaces/sendgrid/contact.interface.ts @@ -0,0 +1,4 @@ +export interface SendgridContact { + email: string; + id: string; +} diff --git a/src/modules/email/interfaces/sendgrid/response.interface.ts b/src/modules/email/interfaces/sendgrid/response.interface.ts new file mode 100644 index 0000000..ea3edbf --- /dev/null +++ b/src/modules/email/interfaces/sendgrid/response.interface.ts @@ -0,0 +1,5 @@ +import { SendgridSearchResult } from './searchResult.interface'; +export interface SendgridResponse { + statusCode: number; + body: SendgridSearchResult; +} diff --git a/src/modules/email/interfaces/sendgrid/searchResult.interface.ts b/src/modules/email/interfaces/sendgrid/searchResult.interface.ts new file mode 100644 index 0000000..ffe8c6b --- /dev/null +++ b/src/modules/email/interfaces/sendgrid/searchResult.interface.ts @@ -0,0 +1,6 @@ +import { SendgridContact } from './contact.interface'; + +export interface SendgridSearchResult { + contact_count: number; + result: SendgridContact[]; +} From efcb9d54c142685a497b4ea2a4fff4427489aa5e Mon Sep 17 00:00:00 2001 From: Suemayah Eldursi Date: Sun, 17 Jan 2021 17:36:33 +0000 Subject: [PATCH 2/2] #79 update user controller to delete user from SendGrid --- src/modules/users/users.controller.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/modules/users/users.controller.ts b/src/modules/users/users.controller.ts index daf73e0..6fc17e9 100644 --- a/src/modules/users/users.controller.ts +++ b/src/modules/users/users.controller.ts @@ -266,7 +266,15 @@ export class UsersController { reason: params.reason, }, }; - this.emailService.send(emailData); + + await this.emailService.send(emailData); + } + + // Delete user email from SendGrid + const response = await this.emailService.getContactId(user.email); + + if (response != null && response.result.length > 0) { + await this.emailService.deleteContact(response.result[0].id); } return {