Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: shopify_id in subscription and usage record #24

Merged
merged 10 commits into from
Mar 14, 2023
6 changes: 6 additions & 0 deletions server/content-types/Billing/Subscription/schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@
"draftAndPublish": false
},
"attributes": {
"shopify_id": {
"type": "biginteger",
"required": true,
"unique": true,
"configurable": false
},
"status": {
"type": "enumeration",
"enum": [
Expand Down
6 changes: 6 additions & 0 deletions server/content-types/Billing/UsageRecord/schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@
"draftAndPublish": false
},
"attributes": {
"shopify_id": {
"type": "biginteger",
"required": true,
"unique": true,
"configurable": false
},
"price": {
"type": "decimal",
"required": true,
Expand Down
2 changes: 1 addition & 1 deletion server/controllers/billing/subscription.js
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ module.exports = ({ strapi }) => ({
const subscriptionDb = await subscriptionService.findByShop(session.shop);
if (_.isEmpty(subscriptionDb.data)) return ctx.notFound();
if (subscriptionDb.data.status !== 'ACTIVE') return ctx.notFound();
const subscriptionShopify = await subscriptionService.findOnShopify(subscriptionDb.data.id, session);
const subscriptionShopify = await subscriptionService.findOnShopify(subscriptionDb.data.shopify_id, session);
ctx.body = {
...subscriptionDb,
shopify: subscriptionShopify,
Expand Down
4 changes: 2 additions & 2 deletions server/services/billing/subscription.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ module.exports = createCoreService('plugin::shopify.subscription', ({ strapi })
// create subscription on db
await super.create({
data: {
id: subscriptionId,
shopify_id: subscriptionId,
status: 'PENDING',
trial_ends_on: trialEndsOn,
confirmation_url: confirmationUrl,
Expand All @@ -53,7 +53,7 @@ module.exports = createCoreService('plugin::shopify.subscription', ({ strapi })
if (_.isEmpty(subscription.data)) {
return;
}
await super.update(subscription.data.id, { data: { status: 'CANCELLED' } });
await strapi.db.query('plugin::shopify.subscription').update({ where: { shopify_id: subscription.data.shopify_id }, data: { status: 'CANCELLED' } });
},

async findOnShopify(id) {
Expand Down
6 changes: 2 additions & 4 deletions server/services/billing/usage-record.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ module.exports = createCoreService('plugin::shopify.usage-record', ({ strapi })
if (_.isEmpty(subscriptionDb.data)) throw new Error('Shop subscription not found');
if (subscriptionDb.data.status !== 'ACTIVE') throw new Error('Shop subscription is not ACTIVE');
// get shopify subscription
const subscriptionShopify = await subscriptionService.findOnShopify(subscriptionDb.data.id);
const subscriptionShopify = await subscriptionService.findOnShopify(subscriptionDb.data.shopify_id);
// get capped amount
const cappedAmount = Number(_.get(subscriptionShopify, 'usage.cappedAmount.amount'));
// get balance used
Expand All @@ -39,16 +39,14 @@ module.exports = createCoreService('plugin::shopify.usage-record', ({ strapi })
params.lineItemId = _.get(subscriptionShopify, 'usage.id');
// get graphql client
const client = new Shopify.Clients.Graphql(session.shop, session.accessToken);

// create usage record on Shopify
const { usageRecordGid } = await appUsageRecordCreate(client, params);

// get numeric id from gid
const usageRecordId = this.usageRecordGidToId(usageRecordGid);
// create usage record on db
const result = await super.create({
data: {
id: usageRecordId,
shopify_id: usageRecordId,
price,
subscription: subscriptionDb.data.id,
},
Expand Down
2 changes: 1 addition & 1 deletion server/services/billing/webhooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const enabledExport = ({ strapi }) => ({
// run before subscribe lifecycles
if (status === 'ACTIVE') await lifecycles.run('beforeSubscribe', shop);
// update subscription
await subscriptionService.update(id, { data: { status } });
await strapi.db.query('plugin::shopify.subscription').update({where: {shopify_id: id }, data: { status: status }});
// run after subscribe lifecycles
if (status === 'ACTIVE') await lifecycles.run('afterSubscribe', shop);
strapi.log.info(`Subscription ${id} updated successfully to ${status}`);
Expand Down