adding charges table and starting the endpoint for charging for a grant
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
module.exports = models => {
|
||||
const { Donor, Grant, Cause, Region, Organization } = models;
|
||||
const { Donor, Grant, Cause, Region, Organization, Charge } = models;
|
||||
|
||||
Donor.hasMany(Grant, { foreignKey: 'donor_id' });
|
||||
|
||||
@@ -20,4 +20,12 @@ module.exports = models => {
|
||||
foreignKey: 'grant_id',
|
||||
otherKey: 'organization_id'
|
||||
});
|
||||
|
||||
Donor.hasMany(Charge, {
|
||||
foreignKey: 'user_id'
|
||||
});
|
||||
|
||||
Organization.hasMany(Charge, {
|
||||
foreignKey: 'user_id'
|
||||
});
|
||||
};
|
||||
|
||||
@@ -2,11 +2,11 @@ require('dotenv/config');
|
||||
|
||||
module.exports = {
|
||||
development: {
|
||||
username: process.env.DB_USERNAME,
|
||||
password: process.env.DB_PASSWORD,
|
||||
database: process.env.DB_DB,
|
||||
host: process.env.DB_HOST,
|
||||
dialect: process.env.DB_DIALECT
|
||||
username: 'root',
|
||||
password: 'water',
|
||||
database: 'base',
|
||||
host: 'localhost',
|
||||
dialect: 'mysql'
|
||||
},
|
||||
test: {
|
||||
username: 'root',
|
||||
|
||||
@@ -5,7 +5,8 @@ const Sequelize = require('sequelize'),
|
||||
RegionModel = require('../models/region.model.js'),
|
||||
OrganizationModel = require('../models/organization.model.js'),
|
||||
UserModel = require('../models/user.model.js'),
|
||||
associate = require('./associate');
|
||||
ChargeModel = require('../models/charge.model');
|
||||
associate = require('./associate');
|
||||
|
||||
const connection_uri = process.env.JAWSDB_MARIA_URL;
|
||||
|
||||
@@ -40,12 +41,14 @@ const Cause = CauseModel(sequelize, Sequelize);
|
||||
const Region = RegionModel(sequelize, Sequelize);
|
||||
const Organization = OrganizationModel(sequelize, Sequelize);
|
||||
const User = UserModel(sequelize, Sequelize);
|
||||
const Charge = ChargeModel(sequelize, Sequelize);
|
||||
db.Donor = Donor;
|
||||
db.Grant = Grant;
|
||||
db.Cause = Cause;
|
||||
db.Region = Region;
|
||||
db.Organization = Organization;
|
||||
db.User = User;
|
||||
db.Charge = Charge;
|
||||
|
||||
// make associations with created models
|
||||
associate(db);
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
const db = require('../config/db.config.js'),
|
||||
errorMaker = require('../helpers/error.maker');
|
||||
|
||||
const stripe = require('stripe')('sk_test_n8NCvCFjD1xFhGiEq6SI8CXj');
|
||||
|
||||
const { Donor, Organization } = db;
|
||||
|
||||
// Subscribe user to plan or one time charge
|
||||
exports.grantCharge = async (req, res, next) => {
|
||||
const { stripeToken, amount, monthly } = req.body;
|
||||
console.log(req.body);
|
||||
|
||||
// if (!monthly) {
|
||||
// const charge = stripe.charges.create({
|
||||
// amount,
|
||||
// currency: 'usd',
|
||||
// description: 'One time payment for grant',
|
||||
// source: stripeToken,
|
||||
// statement_descriptor: 'One time payment for grant'
|
||||
// });
|
||||
// }
|
||||
};
|
||||
@@ -0,0 +1,20 @@
|
||||
'use strict';
|
||||
|
||||
module.exports = {
|
||||
up: (queryInterface, Sequelize) => {
|
||||
return queryInterface.addColumn('donors', 'stripe_id', {
|
||||
type: Sequelize.UUID,
|
||||
defaultValue: null
|
||||
});
|
||||
},
|
||||
|
||||
down: (queryInterface, Sequelize) => {
|
||||
/*
|
||||
Add reverting commands here.
|
||||
Return a promise to correctly handle asynchronicity.
|
||||
|
||||
Example:
|
||||
return queryInterface.dropTable('users');
|
||||
*/
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,33 @@
|
||||
'use strict';
|
||||
module.exports = {
|
||||
up: (queryInterface, Sequelize) => {
|
||||
return queryInterface.createTable('charges', {
|
||||
id: {
|
||||
allowNull: false,
|
||||
autoIncrement: true,
|
||||
primaryKey: true,
|
||||
type: Sequelize.INTEGER
|
||||
},
|
||||
amount: {
|
||||
allowNull: false,
|
||||
type: Sequelize.INTEGER
|
||||
},
|
||||
description: {
|
||||
type: Sequelize.STRING
|
||||
},
|
||||
createdAt: {
|
||||
allowNull: false,
|
||||
type: Sequelize.DATE,
|
||||
defaultValue: new Date()
|
||||
},
|
||||
updatedAt: {
|
||||
allowNull: false,
|
||||
type: Sequelize.DATE,
|
||||
defaultValue: new Date()
|
||||
}
|
||||
});
|
||||
},
|
||||
down: (queryInterface, Sequelize) => {
|
||||
return queryInterface.dropTable('charges');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,10 @@
|
||||
'use strict';
|
||||
module.exports = (sequelize, DataTypes) => {
|
||||
const Charge = sequelize.define('charges', {
|
||||
id: { type: DataTypes.UUID, primaryKey: true, allowNull: false },
|
||||
description: DataTypes.STRING,
|
||||
amount: DataTypes.INTEGER
|
||||
});
|
||||
|
||||
return Charge;
|
||||
};
|
||||
@@ -17,6 +17,7 @@ router.get('/grants/', checkAuth(roles.DONOR), controllers.grant.findByDonorId);
|
||||
/** POST Create grants with following body:
|
||||
* - list of id's of selected causes and regions
|
||||
* - FINAL list of id's of selected organizations
|
||||
* - monthly true or false
|
||||
* - donor_id
|
||||
* */
|
||||
router.post(
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
const express = require('express'),
|
||||
router = express.Router(),
|
||||
checkAuth = require('../middleware/check-auth'),
|
||||
roles = require('../helpers/roles');
|
||||
|
||||
const controller = require('../controllers/stripe.controller');
|
||||
|
||||
// POST create one time or monthly charge for grant
|
||||
router.post('/donor/grant', checkAuth(roles.DONOR), controller.grantCharge);
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user