46 add stripe product endpoint (#4133)

* Add self billing feature flag

* Add two core tables for billing

* Remove useless imports

* Remove graphql decorators

* Rename subscriptionProduct table

* WIP: Add stripe config

* Add controller to get product prices

* Add billing service

* Remove unecessary package

* Simplify stripe service

* Code review returns

* Use nestjs param

* Rename subscription to basePlan

* Rename env variable
This commit is contained in:
martmull
2024-02-22 20:11:26 +01:00
committed by GitHub
parent ce7be4c48e
commit 679456e819
7 changed files with 143 additions and 2 deletions

View File

@ -0,0 +1,43 @@
import { Injectable } from '@nestjs/common';
import Stripe from 'stripe';
import { EnvironmentService } from 'src/integrations/environment/environment.service';
export type PriceData = Partial<
Record<Stripe.Price.Recurring.Interval, Stripe.Price>
>;
export enum AvailableProduct {
BasePlan = 'base-plan',
}
@Injectable()
export class BillingService {
constructor(private readonly environmentService: EnvironmentService) {}
getProductStripeId(product: AvailableProduct) {
if (product === AvailableProduct.BasePlan) {
return this.environmentService.getBillingStripeBasePlanProductId();
}
}
formatProductPrices(prices: Stripe.Price[]) {
const result: PriceData = {};
prices.forEach((item) => {
const recurringInterval = item.recurring?.interval;
if (!recurringInterval) {
return;
}
if (
!result[recurringInterval] ||
item.created > (result[recurringInterval]?.created || 0)
) {
result[recurringInterval] = item;
}
});
return result;
}
}