From e9dd0b3b25a9580fcb5ee03296d761430c0ff34e Mon Sep 17 00:00:00 2001 From: Arjun Patel Date: Wed, 6 Mar 2019 14:52:40 -0800 Subject: [PATCH] taking in proper amounts and distribution...call stripe methods instead of middleware --- app/controllers/donor/grant.controller.js | 14 +++++------ app/controllers/donor/stripe.controller.js | 29 +++++++++++++--------- app/routes/donor.route.js | 3 +-- 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/app/controllers/donor/grant.controller.js b/app/controllers/donor/grant.controller.js index dab8180..29179f3 100644 --- a/app/controllers/donor/grant.controller.js +++ b/app/controllers/donor/grant.controller.js @@ -1,14 +1,17 @@ const db = require('../../config/db.config.js'), errorMaker = require('../../helpers/error.maker'); +const stripe = require('./stripe.controller'); + const { Grant, Cause, Region, Organization, sequelize } = db; // Create a grant for certain donor exports.create = (req, res, next) => { const donor_id = req.user.id; - const { name, amounts, monthly, causes, regions, organizations } = req.body; + const { name, monthly, causes, regions, organizations } = req.body; - const total_amount = 100; + var total_amount = organizations.map((org) => org.amount).reduce((partial_sum, a) => partial_sum + a); + var total_amount = total_amount * 100; return sequelize .transaction(function(t) { @@ -39,12 +42,7 @@ exports.create = (req, res, next) => { }) .then(function(grants) { // transaction committed - // res.status(201).json({ - // grant, - // message: 'Grant Created' - // }); - - next(grants.dataValues); + stripe.grantCharge({grant: grants.dataValues, total_amount}, req, res); return null; }) .catch(function(error) { diff --git a/app/controllers/donor/stripe.controller.js b/app/controllers/donor/stripe.controller.js index 001177b..7cb1a93 100644 --- a/app/controllers/donor/stripe.controller.js +++ b/app/controllers/donor/stripe.controller.js @@ -6,12 +6,11 @@ const stripe = require('stripe')('sk_test_n8NCvCFjD1xFhGiEq6SI8CXj'); const { Donor, Charge, PaymentPlan } = db; // Subscribe user to plan or one time charge -exports.grantCharge = async (grant, req, res, next) => { - const { stripeToken, monthly } = req.body; +exports.grantCharge = async (data, req, res) => { + const { stripeToken, organizations, monthly } = req.body; + const { total_amount, grant } = await data; // passed from grant controller const grant_id = await grant.id; - const amount = 100 * 100; //stripe standards - const user = req.user; const product_id = 'prod_ER3jOog6QMX1GP', default_plan_id = 'default_plan'; // main Grants product @@ -38,23 +37,29 @@ exports.grantCharge = async (grant, req, res, next) => { // charge if not monthly, plan if it is if (!monthly) { let charge = await stripe.charges.create({ - amount, + amount: total_amount, currency: 'usd', source: 'tok_visa', description: 'One time payment for grant', statement_descriptor: 'one-time-grant' }); + + let transfers = await organizations.map(async (org) => { + org.amount = org.amount * 100; + const applicationStripeFee = org.amount * 0.05; - await stripe.transfers.create({ - amount: amount - 1000, - currency: 'usd', - source_transaction: charge.id, - destination: 'acct_1EAxzUIVW1uo07uH' + let t = await stripe.transfers.create({ + amount: org.amount - applicationStripeFee, + currency: 'usd', + source_transaction: charge.id, + destination: 'acct_1EAxzUIVW1uo07uH' + }); + return t; }); await Charge.create({ id: charge.id, - amount, + amount: total_amount, description: 'One time payment for grant' }); @@ -113,7 +118,7 @@ exports.grantCharge = async (grant, req, res, next) => { grant }); } catch (error) { - next(error); + throw error; } }; diff --git a/app/routes/donor.route.js b/app/routes/donor.route.js index aca39e3..1808c3c 100644 --- a/app/routes/donor.route.js +++ b/app/routes/donor.route.js @@ -22,8 +22,7 @@ router.get('/grants/', checkAuth(roles.DONOR), controllers.grant.findByDonorId); router.post( '/grants/', checkAuth(roles.DONOR), - controllers.grant.create, - controllers.stripe.grantCharge + controllers.grant.create ); // DELETE a grant of a donor