Skip to content

Commit

Permalink
Merge pull request #2 from gofynd/initial-features
Browse files Browse the repository at this point in the history
Add basic example files for better reference of using this library
  • Loading branch information
brijeshgajjarfynd authored Nov 18, 2021
2 parents 3d083be + f29e73c commit 8a2ea7c
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 1 deletion.
71 changes: 71 additions & 0 deletions examples/basic-example.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
'use strict';

const express = require('express');
const { setupBilling, OrmType } = require("fdk-extension-utils-javascript");
const mongooseConnection = mongoose.createConnection("mongodb://localhost:27017"); // ORM connection object

let FDKBilling = setupBilling({
extension_id: "",
db_connection: mongooseConnection,
collection_name: {
plan: "plans",
subscription: "seller_subscriptions"
},
orm_type: OrmType.MONGOOSE
});


const subscriptionRouter = express.Router({mergeParams: true});

// get list of active plans for pricing page
subscriptionRouter.get("/plans", async (req, res, next) => {
try {
const plans = await FDKBilling.getActivePlans();
res.json({plans: plans});
}
catch(err) {
next(err);
}
});

// get active subscription for company
subscriptionRouter.get("/subscription", async (req, res, next) => {
try {
const { params } = req;
const activeSubscription = await FDKBilling.getActiveSubscription(Number(params.company_id));
res.json(activeSubscription);
}
catch(err) {
next(err);
}
});

// start subscription process for a company
subscriptionRouter.post("/subscription/:plan_id", async (req, res, next) => {
try {
const { params, platformClient } = req;
let callbackUrl = `${config.BROWSER_CONFIG.HOST_MAIN_URL}/company/${params.company_id}/subscription_status`;
const subscriptionMeta = await FDKBilling.subscribePlan(params.company_id, params.plan_id, platformClient, callbackUrl);
res.json(subscriptionMeta);
}
catch(err) {
next(err);
}
});

// update subscription status from Fynd Platform side for company after user consent
subscriptionRouter.post("/subscription/:platform_subscription_id/status", async (req, res, next) => {
try {
const { params, platformClient } = req;
const subscriptionMeta = await FDKBilling.updateSubscriptionStatus(params.company_id, params.platform_subscription_id, platformClient);
if(!subscriptionMeta.success) {
return res.status(400).json({"message": subscriptionMeta.message});
}
res.json(subscriptionMeta.seller_subscription);
}
catch(err) {
next(err);
}
});

module.exports = subscriptionRouter;
12 changes: 11 additions & 1 deletion helpers/common.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
const { Connection } = require("mongoose");
const { OrmType } = require("./constants");

function omit(object, paths) {
return Object.fromEntries(Object.entries(object).filter((key)=>!paths.includes(key)));
}

function getConnectionInstance(ormType) {
return {
[OrmType.MONGOOSE]: Connection
}[ormType]
}

module.exports = {
omit
omit,
getConnectionInstance
}
5 changes: 5 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
const { Connection } = require("mongoose");
const { getConnectionInstance } = require("./helpers/common");
const { OrmType } = require("./helpers/constants");
const Plan = require("./models/entities/plan");
const Subscription = require("./models/entities/subscription");
Expand All @@ -24,6 +26,9 @@ function setupBilling(config) {
if (!Object.values(OrmType).includes(config.orm_type)) {
throw Error(`\`orm_type\` value is invalid. Allowed values are: ${Object.values(OrmType).join(", ")}`);
}
if(!(config.db_connection instanceof getConnectionInstance(config.orm_type))) {
throw Error("`db_connection` object type is invalid for orm");
}

const models = require("./models")(config.db_connection, config.collection_name, config.orm_type);
const { getActivePlans, subscribePlan, getActiveSubscription, updateSubscriptionStatus } = require("./controllers/subscription.helper")(config, models);
Expand Down
17 changes: 17 additions & 0 deletions spec/tests/index.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -100,4 +100,21 @@ describe("Setup Billing function verifications", () => {
expect(errorMsg).toBe("`orm_type` value is invalid. Allowed values are: mongoose");
});

it("Invalid db connection", async () => {
let errorMsg = "";
try {
setupBilling({
extension_id: "API_KEY",
db_connection: {},
collection_name: {plan: "test_plan", subscription: "test_subscription"},
orm_type: "mongoose"
})
}
catch(err) {
errorMsg = err.message;
}

expect(errorMsg).toBe("`db_connection` object type is invalid for orm");
});

});

0 comments on commit 8a2ea7c

Please sign in to comment.