Browse Source

Improve creation of Stripe checkout session

pull/7220/head
Thomas Kaul 2 months ago
parent
commit
ca7d5b5f72
  1. 4
      apps/api/src/app/app.module.ts
  2. 4
      apps/api/src/app/subscription/subscription.controller.ts
  3. 32
      apps/api/src/app/subscription/subscription.service.ts
  4. 4
      apps/api/src/middlewares/html-template.middleware.ts
  5. 2
      libs/common/src/lib/config.ts

4
apps/api/src/app/app.module.ts

@ -147,7 +147,9 @@ import { UserModule } from './user/user.module';
.split(',')[0]
.split('-')[0];
if (SUPPORTED_LANGUAGE_CODES.includes(code)) {
if (
(SUPPORTED_LANGUAGE_CODES as readonly string[]).includes(code)
) {
languageCode = code;
}
} catch {}

4
apps/api/src/app/subscription/subscription.controller.ts

@ -116,11 +116,11 @@ export class SubscriptionController {
@Post('stripe/checkout-session')
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public createStripeCheckoutSession(
public async createStripeCheckoutSession(
@Body() { couponId, priceId }: { couponId?: string; priceId: string }
): Promise<CreateStripeCheckoutSessionResponse> {
try {
return this.subscriptionService.createStripeCheckoutSession({
return await this.subscriptionService.createStripeCheckoutSession({
couponId,
priceId,
user: this.request.user

32
apps/api/src/app/subscription/subscription.service.ts

@ -3,7 +3,8 @@ import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
import { PropertyService } from '@ghostfolio/api/services/property/property.service';
import {
DEFAULT_LANGUAGE_CODE,
PROPERTY_STRIPE_CONFIG
PROPERTY_STRIPE_CONFIG,
SUPPORTED_LANGUAGE_CODES
} from '@ghostfolio/common/config';
import { SubscriptionType } from '@ghostfolio/common/enums';
import { parseDate } from '@ghostfolio/common/helper';
@ -75,10 +76,7 @@ export class SubscriptionService {
quantity: 1
}
],
locale:
(user.settings?.settings
?.language as Stripe.Checkout.SessionCreateParams.Locale) ??
DEFAULT_LANGUAGE_CODE,
locale: this.getStripeLocale(user.settings?.settings?.language),
metadata: subscriptionOffer
? { subscriptionOffer: JSON.stringify(subscriptionOffer) }
: {},
@ -246,4 +244,28 @@ export class SubscriptionService {
isRenewal: key.startsWith('renewal')
};
}
private getStripeLocale(
languageCode: string
): Stripe.Checkout.SessionCreateParams.Locale {
const unsupportedLanguageCodes: Record<
Exclude<
(typeof SUPPORTED_LANGUAGE_CODES)[number],
Stripe.Checkout.SessionCreateParams.Locale
>,
true
> = {
ca: true,
uk: true
};
if (
(SUPPORTED_LANGUAGE_CODES as readonly string[]).includes(languageCode) &&
!(languageCode in unsupportedLanguageCodes)
) {
return languageCode as Stripe.Checkout.SessionCreateParams.Locale;
}
return DEFAULT_LANGUAGE_CODE;
}
}

4
apps/api/src/middlewares/html-template.middleware.ts

@ -117,7 +117,9 @@ export class HtmlTemplateMiddleware implements NestMiddleware {
const path = request.originalUrl.replace(/\/$/, '');
let languageCode = path.substr(1, 2);
if (!SUPPORTED_LANGUAGE_CODES.includes(languageCode)) {
if (
!(SUPPORTED_LANGUAGE_CODES as readonly string[]).includes(languageCode)
) {
languageCode = DEFAULT_LANGUAGE_CODE;
}

2
libs/common/src/lib/config.ts

@ -323,7 +323,7 @@ export const SUPPORTED_LANGUAGE_CODES = [
'tr',
'uk',
'zh'
];
] as const;
export const TAG_ID_EMERGENCY_FUND = '4452656d-9fa4-4bd0-ba38-70492e31d180';
export const TAG_ID_EXCLUDE_FROM_ANALYSIS =

Loading…
Cancel
Save