From 556369af11dea7a91b5a33f9b8091cae91cd7ec5 Mon Sep 17 00:00:00 2001 From: Arjun Patel Date: Wed, 30 Jan 2019 11:46:14 -0800 Subject: [PATCH] changes to grant creation and model clean --- app/controllers/donor/grant.controller.js | 47 +++++++++++-------- .../donor/organization.controller.js | 2 +- app/models/grant.model.js | 4 -- app/routes/donor.route.js | 6 +-- 4 files changed, 30 insertions(+), 29 deletions(-) diff --git a/app/controllers/donor/grant.controller.js b/app/controllers/donor/grant.controller.js index 1f75ffd..726e320 100644 --- a/app/controllers/donor/grant.controller.js +++ b/app/controllers/donor/grant.controller.js @@ -1,35 +1,44 @@ const db = require('../../config/db.config.js'), errorMaker = require('../../helpers/error.maker'); -const { Grant, Cause, Region, Organization } = db; +const { Grant, Cause, Region, Organization, sequelize } = db; // Create a grant for certain donor exports.create = (req, res, next) => { - const donor_id = req.params.donor_id; + const donor_id = req.user.id; const { name, amount, monthly, causes, regions, organizations } = req.body; - Grant.create({ - donor_id, - name, - amount, - monthly, - num_causes: causes.length, - num_regions: regions.length - }) - .then(grant => { - return Promise.all([ - grant.addCauses(causes), - grant.addRegions(regions), - grant.addOrganizations(organizations) - ]).then(result => result); + return sequelize + .transaction(function(t) { + return Grant.create( + { + donor_id, + name, + amount, + monthly, + num_causes: causes.length, + num_regions: regions.length + }, + { transaction: t } + ).then(grant => { + return Promise.all([ + grant.addCauses(causes, { transaction: t }), + grant.addRegions(regions, { transaction: t }), + grant.addOrganizations(organizations, { transaction: t }) + ]).then(result => grant); + }); }) - .then(result => { + .then(function(grant) { + // transaction committed res.status(201).json({ - result, + grant, message: 'Grant Created' }); }) - .catch(error => next(error)); + .catch(function(error) { + // transaction rollback + next(error); + }); }; // Find grants with causes, regions, and organizations by donor_id diff --git a/app/controllers/donor/organization.controller.js b/app/controllers/donor/organization.controller.js index a8ee05b..787b231 100644 --- a/app/controllers/donor/organization.controller.js +++ b/app/controllers/donor/organization.controller.js @@ -20,7 +20,7 @@ exports.findSuggested = (req, res, next) => { const QUERY = 'SELECT * from organizations ' + - 'WHERE primary_cause IN (:causes) and primary_region IN (:regions) ' + + 'WHERE primary_cause IN (:causes) or primary_region IN (:regions) ' + 'LIMIT :max_orgs'; db.sequelize .query(QUERY, { diff --git a/app/models/grant.model.js b/app/models/grant.model.js index a2f6f31..47d1595 100644 --- a/app/models/grant.model.js +++ b/app/models/grant.model.js @@ -14,10 +14,6 @@ module.exports = (sequelize, DataTypes) => { type: DataTypes.INTEGER, allowNull: false }, - last_payment: { - type: DataTypes.DATE, - default: new Date() - }, monthly: { type: DataTypes.BOOLEAN, allowNull: false, diff --git a/app/routes/donor.route.js b/app/routes/donor.route.js index 7d3806f..ba518bf 100644 --- a/app/routes/donor.route.js +++ b/app/routes/donor.route.js @@ -20,11 +20,7 @@ router.get('/grants/', checkAuth(roles.DONOR), controllers.grant.findByDonorId); * - monthly true or false * - donor_id * */ -router.post( - '/grants/:donor_id', - checkAuth(roles.DONOR), - controllers.grant.create -); +router.post('/grants/', checkAuth(roles.DONOR), controllers.grant.create); // DELECT a grant of a donor router.delete(