From 66df6bb576ecc221c00a6a062ccfb521487cbcec Mon Sep 17 00:00:00 2001 From: Arjun Patel Date: Fri, 12 Apr 2019 14:11:33 -0700 Subject: [PATCH] allowing charities to add ribbons for --- app/controllers/post.controller.js | 5 +- app/controllers/stripe.controller.js | 200 +++++++++++++-------------- app/routes/donor.route.js | 7 +- 3 files changed, 106 insertions(+), 106 deletions(-) diff --git a/app/controllers/post.controller.js b/app/controllers/post.controller.js index bcd28d6..a11c659 100644 --- a/app/controllers/post.controller.js +++ b/app/controllers/post.controller.js @@ -12,7 +12,9 @@ exports.getStatusUpdatesByOrg = async (req, res, next) => { const posts = await sequelize.query( ` SELECT * FROM posts - WHERE organization_id = :organization_id`, + WHERE organization_id = :organization_id + ORDER BY created_at DESC + LIMIT 6`, { type: db.Sequelize.QueryTypes.SELECT, replacements: { organization_id } @@ -70,6 +72,7 @@ exports.addRibbon = async (req, res, next) => { message: 'Successfully added ribbon to post!' }); } catch (error) { + console.log(error); next(error); } }; diff --git a/app/controllers/stripe.controller.js b/app/controllers/stripe.controller.js index 4b56693..669401c 100644 --- a/app/controllers/stripe.controller.js +++ b/app/controllers/stripe.controller.js @@ -1,141 +1,141 @@ -const db = require("../../models"), - errorMaker = require("../helpers/error.maker"), - requestPromise = require("request-promise"); +const db = require('../../models'), + errorMaker = require('../helpers/error.maker'), + requestPromise = require('request-promise'); -const stripe = require("stripe")(process.env.STRIPE_KEY); +const stripe = require('stripe')(process.env.STRIPE_KEY); const { Donor, Organization, Charge, PaymentPlan } = db; // Subscribe user to plan or one time charge exports.grantCharge = async ({ - grant, - stripeToken, - organizations, - monthly, - amount, - user + grant, + stripeToken, + organizations, + monthly, + amount, + user }) => { - const grant_id = await grant.id; + const grant_id = await grant.id; - try { - const donors = await Donor.findAll({ where: { id: user.id } }); + try { + const donors = await Donor.findAll({ where: { id: user.id } }); - const stripeAmount = amount * 100; + const stripeAmount = amount * 100; - // charge if yes or no monthly - let charge = await stripe.charges.create({ - amount: stripeAmount, - currency: "usd", - source: "tok_visa", - description: `Charity Bundle Payment`, - statement_descriptor: `charity bundle ${grant.id}`, - receipt_email: "arjun@ucharify.com" - }); + // charge if yes or no monthly + let charge = await stripe.charges.create({ + amount: stripeAmount, + currency: 'usd', + source: 'tok_visa', + description: `Charity Bundle Payment`, + statement_descriptor: `charity bundle ${grant.id}`, + receipt_email: 'arjun@ucharify.com' + }); - let transfers = await organizations.map(async org => { - let stripeOrgAmount = Math.round(org.amount * 100); - const applicationStripeFee = stripeOrgAmount * 0.05; + let transfers = await organizations.map(async org => { + let stripeOrgAmount = Math.round(org.amount * 100); + const applicationStripeFee = stripeOrgAmount * 0.05; - let t = await stripe.transfers.create({ - amount: stripeOrgAmount - applicationStripeFee, - currency: "usd", - source_transaction: charge.id, - destination: "acct_1EAxzUIVW1uo07uH" - }); - return t; - }); + let t = await stripe.transfers.create({ + amount: stripeOrgAmount - applicationStripeFee, + currency: 'usd', + source_transaction: charge.id, + destination: 'acct_1EAxzUIVW1uo07uH' + }); + return t; + }); - return charge; - } catch (error) { - throw error; - } + return charge; + } catch (error) { + throw error; + } }; // Delete grant's stripe plan under subscription exports.deleteGrant = async (req, res, next) => { - const { grant_id } = req.body; + const { grant_id } = req.body; - try { - const paymentPlans = await PaymentPlan.findAll({ where: { grant_id } }); + try { + const paymentPlans = await PaymentPlan.findAll({ where: { grant_id } }); - // check if there are plans for that grant - if (!paymentPlans.length) { - return res.status(400).json({ - message: "Not a valid grant" - }); - } else { - const plan = paymentPlans[0]; + // check if there are plans for that grant + if (!paymentPlans.length) { + return res.status(400).json({ + message: 'Not a valid grant' + }); + } else { + const plan = paymentPlans[0]; - //delete the plan/grant under the subscription for the user - await stripe.subscriptionItems.del(plan.sub_item_id); - //delete the plan from the main product 'Grants' - await stripe.plans.del(plan.plan_id); - } + //delete the plan/grant under the subscription for the user + await stripe.subscriptionItems.del(plan.sub_item_id); + //delete the plan from the main product 'Grants' + await stripe.plans.del(plan.plan_id); + } - next(); - } catch (error) { - next(error); - } + next(); + } catch (error) { + next(error); + } }; // allows the org to see their stripe account with their balance and payout to their bank exports.getExpressUILink = async (req, res, next) => { - // get connected stripe account id from db - // createLoginLink with stripe function - // return to frontend - const org_id = req.user.id; + // get connected stripe account id from db + // createLoginLink with stripe function + // return to frontend + const org_id = req.user.id; - try { - const orgs = await db.sequelize.query( - `SELECT stripe_account_id + try { + const orgs = await db.sequelize.query( + `SELECT stripe_account_id FROM organizations WHERE id = :org_id LIMIT 1`, - { replacements: { org_id }, type: db.sequelize.QueryTypes.SELECT } - ); + { replacements: { org_id }, type: db.sequelize.QueryTypes.SELECT } + ); - const stripeAccessRes = await stripe.accounts.createLoginLink( - orgs[0].stripe_account_id - ); + const stripeAccessRes = await stripe.accounts.createLoginLink( + orgs[0].stripe_account_id + ); - return res.status(200).json({ url: stripeAccessRes.url }); - } catch (error) { - next(error); - } + return res.status(200).json({ url: stripeAccessRes.url }); + } catch (error) { + next(error); + } }; // verify the charity after they filled out basic info for express ui exports.activateStripeAccount = async (req, res, next) => { - const { code, state } = req.query; - const org_id = state; + const { code, state } = req.query; + const org_id = state; - try { - var dataString = `client_secret=${ - process.env.STRIPE_KEY - }&code=${code}&grant_type=authorization_code`; + try { + var dataString = `client_secret=${ + process.env.STRIPE_KEY + }&code=${code}&grant_type=authorization_code`; - var options = { - uri: "https://connect.stripe.com/oauth/token", - method: "POST", - body: { - client_secret: process.env.STRIPE_KEY, - code, - grant_type: "authorization_code" - }, - json: true - }; + var options = { + uri: 'https://connect.stripe.com/oauth/token', + method: 'POST', + body: { + client_secret: process.env.STRIPE_KEY, + code, + grant_type: 'authorization_code' + }, + json: true + }; - // store for current user, get user_id from the state param maybe? - const stripeAccRes = await requestPromise(options); - const { stripe_user_id } = stripeAccRes; + // store for current user, get user_id from the state param maybe? + const stripeAccRes = await requestPromise(options); + const { stripe_user_id } = stripeAccRes; - const updateRes = await db.sequelize.query( - "UPDATE organizations SET stripe_account_id = :stripe_user_id WHERE id = :org_id", - { replacements: { stripe_user_id, org_id } } - ); + const updateRes = await db.sequelize.query( + 'UPDATE organizations SET stripe_account_id = :stripe_user_id WHERE id = :org_id', + { replacements: { stripe_user_id, org_id } } + ); - return res.status(302).redirect("http://localhost:8081/org/main/banking"); - } catch (error) { - next(error); - } + return res.status(302).redirect('http://localhost:8081/org/main/'); + } catch (error) { + next(error); + } }; diff --git a/app/routes/donor.route.js b/app/routes/donor.route.js index 2a5d16e..bf14131 100644 --- a/app/routes/donor.route.js +++ b/app/routes/donor.route.js @@ -55,11 +55,8 @@ router.get('/dashboard', checkAuth(roles.DONOR), donor.getDashboardData); router.get('/charges', checkAuth(roles.DONOR), charge.getAllChargesbyDonor); -router.put( - '/statusupdate/ribbon/:update_id', - checkAuth(roles.DONOR), - post.addRibbon -); +//TODO: checkAuth so only donors can add ribbons +router.put('/statusupdate/ribbon/:update_id', post.addRibbon); // // Retrieve a single Donor by Id // router.get('/:donor_id', donor.findById);