UNPKG

@dbbs/strapi-stripe-payment

Version:
102 lines (81 loc) 2.52 kB
/** * service */ import createHttpError from 'http-errors' import { factories, Strapi } from '@strapi/strapi' import { CreatePlanParams, CreateStripePriceParams, DeletePlanParams, GetPlanByIdParams } from '../interfaces' import { PlanType, SupportedCurrency } from '../enums' export default factories.createCoreService('plugin::stripe-payment.plan', ({ strapi }: { strapi: Strapi }) => ({ async create(params: CreatePlanParams) { 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 createHttpError.NotFound(`Cannot create a plan as the product with ID ${productId} was not found`) } const planData: CreateStripePriceParams = { currency, product: product.stripe_id, unit_amount: price * 100 } if (type === 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: GetPlanByIdParams) { 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: DeletePlanParams) { 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(SupportedCurrency) return currencies } }))