Merge branch 'staging' into preprod

This commit is contained in:
Vins 2024-06-20 16:23:24 +02:00
commit bac3891c29
4 changed files with 65 additions and 0 deletions

View File

@ -0,0 +1,35 @@
import { Response, Request } from "express";
import { Controller, Post } from "@ControllerPattern/index";
import ApiController from "@Common/system/controller-pattern/ApiController";
import { Service } from "typedi";
import authHandler from "@App/middlewares/AuthHandler";
import MailchimpService from "@Services/common/MailchimpService/MailchimpService";
@Controller()
@Service()
export default class MailchimpController extends ApiController {
constructor(private mailchimpService: MailchimpService) {
super();
}
/**
* @description Create a new customer
*/
@Post("/api/v1/notary/mailchimp", [authHandler])
protected async post(req: Request, response: Response) {
try {
//init IUser resource with request body values
const email = req.body.email;
//call service to get prisma entity
const responseCall = await this.mailchimpService.addToMailchimpList(email);
//success
this.httpCreated(response, responseCall);
} catch (error) {
this.httpInternalError(response, error);
return;
}
}
}

View File

@ -54,6 +54,7 @@ import StripeController from "./api/admin/StripeController";
import StripeWebhooks from "@Common/webhooks/stripeWebhooks"; import StripeWebhooks from "@Common/webhooks/stripeWebhooks";
import RulesGroupsController from "./api/admin/RulesGroupsController"; import RulesGroupsController from "./api/admin/RulesGroupsController";
import NotesController from "./api/customer/NotesController"; import NotesController from "./api/customer/NotesController";
import MailchimpController from "./api/notary/MailchimpController";
/** /**
* @description This allow to declare all controllers used in the application * @description This allow to declare all controllers used in the application
@ -116,5 +117,6 @@ export default {
Container.get(StripeWebhooks); Container.get(StripeWebhooks);
Container.get(RulesGroupsController); Container.get(RulesGroupsController);
Container.get(NotesController); Container.get(NotesController);
Container.get(MailchimpController);
}, },
}; };

View File

@ -160,6 +160,12 @@ export class BackendVariables {
@IsNotEmpty() @IsNotEmpty()
public readonly IDNOT_PROD_BASE_URL!: string; public readonly IDNOT_PROD_BASE_URL!: string;
@IsNotEmpty()
public readonly MAILCHIMP_KEY!: string;
@IsNotEmpty()
public readonly MAILCHIMP_LIST_ID!: string;
public constructor() { public constructor() {
dotenv.config(); dotenv.config();
this.DATABASE_PORT = process.env["DATABASE_PORT"]!; this.DATABASE_PORT = process.env["DATABASE_PORT"]!;
@ -214,6 +220,8 @@ export class BackendVariables {
this.STRIPE_UNLIMITED_SUBSCRIPTION_PRICE_ID = process.env["STRIPE_UNLIMITED_SUBSCRIPTION_PRICE_ID"]!; this.STRIPE_UNLIMITED_SUBSCRIPTION_PRICE_ID = process.env["STRIPE_UNLIMITED_SUBSCRIPTION_PRICE_ID"]!;
this.STRIPE_UNLIMITED_ANNUAL_SUBSCRIPTION_PRICE_ID = process.env["STRIPE_UNLIMITED_ANNUAL_SUBSCRIPTION_PRICE_ID"]!; this.STRIPE_UNLIMITED_ANNUAL_SUBSCRIPTION_PRICE_ID = process.env["STRIPE_UNLIMITED_ANNUAL_SUBSCRIPTION_PRICE_ID"]!;
this.IDNOT_PROD_BASE_URL = process.env["IDNOT_PROD_BASE_URL"]!; this.IDNOT_PROD_BASE_URL = process.env["IDNOT_PROD_BASE_URL"]!;
this.MAILCHIMP_KEY = process.env["MAILCHIMP_KEY"]!;
this.MAILCHIMP_LIST_ID = process.env["MAILCHIMP_LIST_ID"]!;
} }
public async validate(groups?: string[]) { public async validate(groups?: string[]) {
const validationOptions = groups ? { groups } : undefined; const validationOptions = groups ? { groups } : undefined;

View File

@ -114,4 +114,24 @@ export default class MailchimpService extends BaseService {
}; };
}); });
} }
public async addToMailchimpList(email: string) {
const MAILCHIMP_API_KEY = this.variables.MAILCHIMP_KEY;
const data = {
email_address: email,
status: 'subscribed'
};
const response = await fetch(`https://us17.api.mailchimp.com/3.0/lists/`+ this.variables.MAILCHIMP_LIST_ID + `/members`, {
method: 'POST',
headers: {
'Authorization': `apikey ${MAILCHIMP_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
return response.json();
}
} }