From 948d661d3010641573592404cb2454e18b3f763c Mon Sep 17 00:00:00 2001 From: Vins Date: Thu, 4 Apr 2024 13:35:06 +0200 Subject: [PATCH] Send invitation email ready --- src/app/api/admin/SubscriptionsController.ts | 31 ++++++++++++++++++- src/common/config/variables/Variables.ts | 4 +++ src/common/emails/EmailBuilder.ts | 28 +++++++++++++++++ src/common/emails/Templates/EmailTemplates.ts | 1 + 4 files changed, 63 insertions(+), 1 deletion(-) diff --git a/src/app/api/admin/SubscriptionsController.ts b/src/app/api/admin/SubscriptionsController.ts index 4de51386..a79c2feb 100644 --- a/src/app/api/admin/SubscriptionsController.ts +++ b/src/app/api/admin/SubscriptionsController.ts @@ -12,11 +12,12 @@ import { validateOrReject } from "class-validator"; import ObjectHydrate from "@Common/helpers/ObjectHydrate"; import roleHandler from "@App/middlewares/RolesHandler"; import authHandler from "@App/middlewares/AuthHandler"; +import EmailBuilder from "@Common/emails/EmailBuilder"; @Controller() @Service() export default class SubscriptionsController extends ApiController { - constructor(private subscriptionsService: SubscriptionsService) { + constructor(private subscriptionsService: SubscriptionsService, private emailBuilder: EmailBuilder) { super(); } @@ -142,4 +143,32 @@ export default class SubscriptionsController extends ApiController { return; } } + + /** + * @description Invite collaborators to a subscription + */ + + @Post("/api/v1/admin/subscriptions/invite", [authHandler, roleHandler]) + protected async inviteCollaborators(req: Request, response: Response) { + try { + //get email list from body + const emails: [string] = req.body.emails; + if (!emails || emails.length < 1){ + this.httpBadRequest(response, "No emails provided"); + return; + } + + console.log(emails); + + //create emails for asked document + await this.emailBuilder.sendInvitationEmails(emails); + + //success + this.httpSuccess(response); + + } catch (error) { + this.httpInternalError(response, error); + return; + } + } } diff --git a/src/common/config/variables/Variables.ts b/src/common/config/variables/Variables.ts index 3b37f398..a65bd265 100644 --- a/src/common/config/variables/Variables.ts +++ b/src/common/config/variables/Variables.ts @@ -157,6 +157,9 @@ export class BackendVariables { @IsNotEmpty() public readonly STRIPE_PAYMENT_CANCEL_URL!: string; + @IsNotEmpty() + public readonly IDNOT_PROD_BASE_URL!: string; + public constructor() { dotenv.config(); this.DATABASE_PORT = process.env["DATABASE_PORT"]!; @@ -210,6 +213,7 @@ export class BackendVariables { this.STRIPE_UNLIMITED_SUBSCRIPTION_PRICE_ID = process.env["STRIPE_UNLIMITED_SUBSCRIPTION_PRICE_ID"]!; this.STRIPE_PAYMENT_SUCCESS_URL = process.env["STRIPE_PAYMENT_SUCCESS_URL"]!; this.STRIPE_PAYMENT_CANCEL_URL = process.env["STRIPE_PAYMENT_CANCEL_URL"]!; + this.IDNOT_PROD_BASE_URL = process.env["IDNOT_PROD_BASE_URL"]!; } public async validate(groups?: string[]) { const validationOptions = groups ? { groups } : undefined; diff --git a/src/common/emails/EmailBuilder.ts b/src/common/emails/EmailBuilder.ts index 81eb1c1e..bc7757e2 100644 --- a/src/common/emails/EmailBuilder.ts +++ b/src/common/emails/EmailBuilder.ts @@ -106,4 +106,32 @@ export default class EmailBuilder { if (civility === "MALE") return "Mr"; else return "Mme"; } + + public async sendInvitationEmails(emails: string[]) { + emails.forEach((email) => { + const to = email; + + const templateVariables = { + link: this.variables.APP_HOST, + idNotLink: this.variables.IDNOT_PROD_BASE_URL, + }; + + const templateName = ETemplates.SUBSCRIPTION_INVITATION; + const subject = "Invitation abonnement LeCoffre"; + + this.mailchimpService.create({ + templateName, + to, + subject, + templateVariables, + uid: "", + from: null, + cc: [], + cci: [], + sentAt: null, + nbTrySend: null, + lastTrySendDate: null, + }); + }); + } } diff --git a/src/common/emails/Templates/EmailTemplates.ts b/src/common/emails/Templates/EmailTemplates.ts index 081cfadb..520098e2 100644 --- a/src/common/emails/Templates/EmailTemplates.ts +++ b/src/common/emails/Templates/EmailTemplates.ts @@ -2,4 +2,5 @@ export const ETemplates = { DOCUMENT_ASKED: "DOCUMENT_ASKED", DOCUMENT_REFUSED: "DOCUMENT_REFUSED", DOCUMENT_RECAP: "DOCUMENT_RECAP", + SUBSCRIPTION_INVITATION: "SUBSCRIPTION_INVITATION", }; \ No newline at end of file