@dbbs/strapi-stripe-payment
Version:
Strapi integration plugin for Stripe payment system
86 lines (85 loc) • 2.91 kB
JavaScript
;
/**
* service
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const http_errors_1 = __importDefault(require("http-errors"));
const strapi_1 = require("@strapi/strapi");
const enums_1 = require("../enums");
exports.default = strapi_1.factories.createCoreService('plugin::stripe-payment.plan', ({ strapi }) => ({
async create(params) {
const { price, interval, productId, type, currency } = params;
const product = await strapi.query('plugin::stripe-payment.product').findOne({
where: { id: productId },
populate: {
plans: true
}
});
if (!product) {
throw new http_errors_1.default.NotFound(`Cannot create a plan as the product with ID ${productId} was not found`);
}
const planData = {
currency,
product: product.stripe_id,
unit_amount: price * 100
};
if (type === enums_1.PlanType.RECURRING) {
planData.recurring = { interval };
}
const plan = await strapi.plugin('stripe-payment').service('stripe').prices.create(planData);
const savedPlan = await strapi.query('plugin::stripe-payment.plan').create({
data: {
price,
interval,
type,
stripe_id: plan.id,
product: product.id,
currency
}
});
await strapi.query('plugin::stripe-payment.product').update({
where: {
id: product.id
},
data: {
plans: [...product.plans, savedPlan.id]
}
});
return savedPlan;
},
async getPlanById(params) {
const { id } = params;
const plan = await strapi.query('plugin::stripe-payment.plan').findOne({
where: { id }
});
return plan;
},
async getPlans() {
const plans = await strapi.query('plugin::stripe-payment.plan').findMany({});
return plans;
},
async delete(params) {
const { id } = params;
const plan = await strapi.query('plugin::stripe-payment.plan').findOne({
where: { id },
populate: {
product: true
}
});
if (!plan) {
return null;
}
await strapi.plugin('stripe-payment').service('stripe').prices.update(plan.stripe_id, {
active: false
});
await strapi.query('plugin::stripe-payment.plan').delete({ where: { id } });
return { id };
},
async getUniqueCurrencies() {
const currencies = Object.values(enums_1.SupportedCurrency);
return currencies;
}
}));