diff --git a/src/modules/email/email.service.ts b/src/modules/email/email.service.ts index 1fbf2e2..eb5da3e 100644 --- a/src/modules/email/email.service.ts +++ b/src/modules/email/email.service.ts @@ -86,6 +86,38 @@ 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); + } + private async injectData(name: string, data: Record) { const template = await this.getTemplateContent(name); const layout = await this.layout; 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[]; +} diff --git a/src/modules/users/users.controller.ts b/src/modules/users/users.controller.ts index ae042f6..416f5b5 100644 --- a/src/modules/users/users.controller.ts +++ b/src/modules/users/users.controller.ts @@ -295,7 +295,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 {