Merge branch 'dev' into staging

This commit is contained in:
Vins 2024-04-24 17:35:19 +02:00
commit 04c516c400
3 changed files with 29 additions and 4 deletions

View File

@ -59,7 +59,7 @@
"file-type-checker": "^1.0.8", "file-type-checker": "^1.0.8",
"fp-ts": "^2.16.1", "fp-ts": "^2.16.1",
"jsonwebtoken": "^9.0.0", "jsonwebtoken": "^9.0.0",
"le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.132", "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.134",
"module-alias": "^2.2.2", "module-alias": "^2.2.2",
"monocle-ts": "^2.3.13", "monocle-ts": "^2.3.13",
"multer": "^1.4.5-lts.1", "multer": "^1.4.5-lts.1",

View File

@ -7,6 +7,7 @@ import StripeService from "@Services/common/StripeService/StripeService";
import { validateOrReject } from "class-validator"; import { validateOrReject } from "class-validator";
import { Request, Response } from "express"; import { Request, Response } from "express";
import { Subscription } from "le-coffre-resources/dist/Admin"; import { Subscription } from "le-coffre-resources/dist/Admin";
import { EPaymentFrequency } from "le-coffre-resources/dist/Admin/Subscription";
import { Service } from "typedi"; import { Service } from "typedi";
@Controller() @Controller()
@ -27,12 +28,18 @@ export default class StripeController extends ApiController {
//add office id to request body //add office id to request body
req.body.office = { uid: officeId }; req.body.office = { uid: officeId };
const frequency : EPaymentFrequency = req.body.frequency;
if(!frequency || !Object.values(EPaymentFrequency).includes(frequency)) {
this.httpBadRequest(response, "Invalid frequency");
return;
}
//init Subscription resource with request body values //init Subscription resource with request body values
const subscriptionEntity = Subscription.hydrate<Subscription>(req.body, { strategy: "excludeAll" }); const subscriptionEntity = Subscription.hydrate<Subscription>(req.body, { strategy: "excludeAll" });
await validateOrReject(subscriptionEntity, { groups: ["createSubscription"], forbidUnknownValues: false }); await validateOrReject(subscriptionEntity, { groups: ["createSubscription"], forbidUnknownValues: false });
const stripeSession = await this.stripeService.createCheckoutSession(subscriptionEntity); const stripeSession = await this.stripeService.createCheckoutSession(subscriptionEntity, frequency);
this.httpCreated(response, stripeSession); this.httpCreated(response, stripeSession);

View File

@ -1,5 +1,6 @@
import { BackendVariables } from "@Common/config/variables/Variables"; import { BackendVariables } from "@Common/config/variables/Variables";
import { Subscription } from "le-coffre-resources/dist/Admin"; import { Subscription } from "le-coffre-resources/dist/Admin";
import { EPaymentFrequency } from "le-coffre-resources/dist/Admin/Subscription";
import Stripe from "stripe"; import Stripe from "stripe";
import { Service } from "typedi"; import { Service } from "typedi";
@ -14,8 +15,25 @@ export default class StripeService {
return this.client; return this.client;
} }
public async createCheckoutSession(subscription: Subscription) { public async createCheckoutSession(subscription: Subscription, frequency: EPaymentFrequency) {
const priceId = subscription.type === "STANDARD" ? this.variables.STRIPE_STANDARD_SUBSCRIPTION_PRICE_ID : this.variables.STRIPE_UNLIMITED_SUBSCRIPTION_PRICE_ID; let priceId = this.variables.STRIPE_UNLIMITED_SUBSCRIPTION_PRICE_ID;
if(subscription.type === "STANDARD") {
if(frequency === EPaymentFrequency.Yearly) {
priceId = this.variables.STRIPE_STANDARD_ANNUAL_SUBSCRIPTION_PRICE_ID;
}
else{
priceId = this.variables.STRIPE_STANDARD_SUBSCRIPTION_PRICE_ID;
}
}
else if(subscription.type === "UNLIMITED") {
if(frequency === EPaymentFrequency.Yearly) {
priceId = this.variables.STRIPE_UNLIMITED_ANNUAL_SUBSCRIPTION_PRICE_ID;
}
else{
priceId = this.variables.STRIPE_UNLIMITED_SUBSCRIPTION_PRICE_ID;
}
}
return this.client.checkout.sessions.create({ return this.client.checkout.sessions.create({
mode: "subscription", mode: "subscription",
payment_method_types: ["card"], payment_method_types: ["card"],