merging create grant and stripe calls

This commit is contained in:
Arjun Patel
2019-02-02 19:33:44 -08:00
parent 49c470ab47
commit 226f5c1149
9 changed files with 112 additions and 27 deletions
+8 -5
View File
@@ -28,12 +28,15 @@ exports.create = (req, res, next) => {
]).then(result => grant);
});
})
.then(function(grant) {
.then(function(grants) {
// transaction committed
res.status(201).json({
grant,
message: 'Grant Created'
});
// res.status(201).json({
// grant,
// message: 'Grant Created'
// });
req.grant = grants.dataValues;
next();
})
.catch(function(error) {
// transaction rollback
+2 -1
View File
@@ -1,5 +1,6 @@
module.exports = {
donor: require('./donor.controller'),
grant: require('./grant.controller'),
organization: require('./organization.controller')
organization: require('./organization.controller'),
stripe: require('./stripe.controller')
};
@@ -1,5 +1,5 @@
const db = require('../config/db.config.js'),
errorMaker = require('../helpers/error.maker');
const db = require('../../config/db.config.js'),
errorMaker = require('../../helpers/error.maker');
const stripe = require('stripe')('sk_test_n8NCvCFjD1xFhGiEq6SI8CXj');
@@ -7,16 +7,20 @@ const { Donor, Charge, PaymentPlan } = db;
// Subscribe user to plan or one time charge
exports.grantCharge = async (req, res, next) => {
const { stripeToken, grant_id, amount, monthly } = req.body;
const { stripeToken, monthly } = req.body;
const { grant_id } = req.grant;
const amount = req.body.amount * 100; //stripe standards
const user = req.user;
const product_id = 'prod_ER3jOog6QMX1GP';
const product_id = 'prod_ER3jOog6QMX1GP',
default_plan_id = 'default_plan'; // main Grants product
try {
const donors = await Donor.findAll({ where: { id: user.id } });
// check if already a stripe customer
let { stripe_id, subscription_id } = donors[0];
console.log(stripeToken);
if (!stripe_id) {
const customer = await stripe.customers.create({
@@ -62,31 +66,63 @@ exports.grantCharge = async (req, res, next) => {
if (!subscription_id) {
let subscription = await stripe.subscriptions.create({
customer: stripe_id,
items: [{ plan: plan.id }]
items: [{ plan: default_plan_id }]
});
subscription_id = subscription.id;
await Donor.update(
{ subscription_id: subscription.id },
{ where: { id: user.id } }
);
} else
await stripe.subscriptionItems.create({
subscription: subscription_id,
plan: plan.id
});
}
const sub_item = await stripe.subscriptionItems.create({
subscription: subscription_id,
plan: plan.id
});
result = await PaymentPlan.create({
plan_id: plan.id,
amount,
grant_id: grant_id
grant_id,
subscription_id,
sub_item_id: sub_item.id
});
}
res.status(200).json({
return res.status(200).json({
message: 'Successfully charged or subscribed',
result
grant: req.grant
});
} catch (error) {
next(error);
}
};
// Delete grant's stripe plan under subscription
exports.deleteGrant = async (req, res, next) => {
const { grant_id } = req.body;
try {
const paymentPlans = await PaymentPlan.findAll({ where: { grant_id } });
// check if there are plans for that grant
if (!paymentPlans.length) {
res.status(400).json({
message: 'Not a valid grant'
});
} else {
const plan = paymentPlans[0];
await stripe.subscriptionItems.del(plan.sub_item_id);
res.status(201).json({
message: 'Removed monthly subscription plan',
plan
});
}
} catch (error) {
next(error);
}
};