From 5493c4cef72b3db87a0dde62e45a9d8efcd826e3 Mon Sep 17 00:00:00 2001 From: Arjun Patel Date: Thu, 3 Jan 2019 14:42:15 -0800 Subject: [PATCH 1/3] Building two models and figuring out structure --- models/Campaigns.js | 28 +++++++++++++++++++++++++++ models/Donors.js | 28 +++++++++++++++++++++++++++ models/dbconnection.js | 0 sequelize.js | 43 ++++++++++++++++++++++++++++++++++++++++++ server.js | 16 +++++++++++++--- 5 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 models/Campaigns.js create mode 100644 models/Donors.js delete mode 100644 models/dbconnection.js create mode 100644 sequelize.js diff --git a/models/Campaigns.js b/models/Campaigns.js new file mode 100644 index 0000000..4c97489 --- /dev/null +++ b/models/Campaigns.js @@ -0,0 +1,28 @@ +module.exports = (sequelize, DataTypes) => { + const Campaigns = sequelize.define('campaigns', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + autoIncrement: true + }, + first_name: DataTypes.STRING, + middle_name: DataTypes.STRING, + last_name: DataTypes.STRING, + email: DataTypes.STRING, + phone: DataTypes.STRING, + address: DataTypes.STRING, + city: DataTypes.STRING, + state: DataTypes.STRING, + country: DataTypes.STRING, + }, + { + freezeTableName: true, + } + ); + + Campaigns.associate = (models) => { + Campaigns.belongsTo(models.donors); + }; + + return Campaigns; +} \ No newline at end of file diff --git a/models/Donors.js b/models/Donors.js new file mode 100644 index 0000000..5226d4e --- /dev/null +++ b/models/Donors.js @@ -0,0 +1,28 @@ +module.exports = (sequelize, DataTypes) => { + const Donors = sequelize.define('donors', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + autoIncrement: true + }, + first_name: DataTypes.STRING, + middle_name: DataTypes.STRING, + last_name: DataTypes.STRING, + email: DataTypes.STRING, + phone: DataTypes.STRING, + address: DataTypes.STRING, + city: DataTypes.STRING, + state: DataTypes.STRING, + country: DataTypes.STRING, + }, + { + freezeTableName: true, + } + ); + + Donors.associate = (models) => { + Donors.hasMany(models.campaigns); + }; + + return Donors; +} \ No newline at end of file diff --git a/models/dbconnection.js b/models/dbconnection.js deleted file mode 100644 index e69de29..0000000 diff --git a/sequelize.js b/sequelize.js new file mode 100644 index 0000000..8557d55 --- /dev/null +++ b/sequelize.js @@ -0,0 +1,43 @@ +const Sequelize = require('sequelize'), + DonorsModel = require('./models/Donors.js'), + CampaignsModel = require('./models/Campaigns.js'); + + +const host = 'am1shyeyqbxzy8gc.cbetxkdyhwsb.us-east-1.rds.amazonaws.com', + username = 'fyro63k2989tyibh', + password = 'ykjkyenyvxig208z', + port = '3306', + database = 'n0j9gxnf4ijr7g8t'; + +const sequelize = new Sequelize( + database, + username, + password, + { + host: host, + dialect: 'mysql', + operatorsAliases: false, + + // research for pool/connections + pool: { + max: 5, + min: 0, + acquire: 30000, + idle: 10000 + } + } +); + +//creating tables from external files +const Donors = DonorsModel(sequelize, Sequelize); +const Campaigns = CampaignsModel(sequelize, Sequelize); + +sequelize.sync({ force: true }) + .then(() => { + console.log(`Database & tables created!`) + }) + +module.exports = { + Donors, + Campaigns +} \ No newline at end of file diff --git a/server.js b/server.js index d1d5172..ef2eaab 100644 --- a/server.js +++ b/server.js @@ -2,8 +2,8 @@ const express = require('express'), app = express(), router = express.Router(), - port = process.env.PORT || 4200; - + port = process.env.PORT || 4200, + sequelize = require('./sequelize.js'); //define a route, usually this would be a bunch of routes imported from another file router.get('/', function (req, res, next) { @@ -17,4 +17,14 @@ router.get('/', function (req, res, next) { app.listen(port); //log to console to let us know it's working -console.log('Ucharify API server started on: ' + port); \ No newline at end of file +console.log('Ucharify API server started on: ' + port); + +// //verify connection to db +// sequelize +// .authenticate() +// .then(() => { +// console.log('Connection has been established successfully.'); +// }) +// .catch(err => { +// console.error('Unable to connect to the database:', err); +// }); From 2c9aed99521e38e937595a7d3d73d75eaebc2fd4 Mon Sep 17 00:00:00 2001 From: Arjun Patel Date: Fri, 4 Jan 2019 15:32:36 -0800 Subject: [PATCH 2/3] whole structure done based on sequelize reccommendation --- sequelize.js => app/config/db.config.js | 23 ++++----- app/controllers/donors.controller.js | 50 +++++++++++++++++++ .../models/campaigns.model.js | 5 -- .../Donors.js => app/models/donors.model.js | 5 -- app/routes/donors.route.js | 19 +++++++ package.json | 1 + server.js | 49 +++++++++++------- 7 files changed, 112 insertions(+), 40 deletions(-) rename sequelize.js => app/config/db.config.js (69%) create mode 100644 app/controllers/donors.controller.js rename models/Campaigns.js => app/models/campaigns.model.js (88%) rename models/Donors.js => app/models/donors.model.js (88%) create mode 100644 app/routes/donors.route.js diff --git a/sequelize.js b/app/config/db.config.js similarity index 69% rename from sequelize.js rename to app/config/db.config.js index 8557d55..c697549 100644 --- a/sequelize.js +++ b/app/config/db.config.js @@ -1,7 +1,7 @@ const Sequelize = require('sequelize'), - DonorsModel = require('./models/Donors.js'), - CampaignsModel = require('./models/Campaigns.js'); - + DonorsModel = require('./models/donors.model.js'), + CampaignsModel = require('./models/campaigns.model.js'); + const host = 'am1shyeyqbxzy8gc.cbetxkdyhwsb.us-east-1.rds.amazonaws.com', username = 'fyro63k2989tyibh', @@ -28,16 +28,15 @@ const sequelize = new Sequelize( } ); -//creating tables from external files +const db = {}; + +//creating tables/models from imported function const Donors = DonorsModel(sequelize, Sequelize); const Campaigns = CampaignsModel(sequelize, Sequelize); +db.donors = Donors; +db.campaigns = Campaigns; -sequelize.sync({ force: true }) - .then(() => { - console.log(`Database & tables created!`) - }) +db.Sequelize = Sequelize; +db.sequelize = sequelize; -module.exports = { - Donors, - Campaigns -} \ No newline at end of file +module.exports = db; \ No newline at end of file diff --git a/app/controllers/donors.controller.js b/app/controllers/donors.controller.js new file mode 100644 index 0000000..d257a93 --- /dev/null +++ b/app/controllers/donors.controller.js @@ -0,0 +1,50 @@ +const db = require('../config/db.config.js'); +const Donors = db.donors; + +// Post a Customer +exports.create = (req, res) => { + // Save to MySQL database + Donors.create({ + firstname: req.body.firstname, + lastname: req.body.lastname, + age: req.body.age + }).then(customer => { + // Send created customer to client + res.send(customer); + }); +}; + +// FETCH all Customers +exports.findAll = (req, res) => { + Donors.findAll().then(customers => { + // Send all customers to Client + res.send(customers); + }); +}; + +// Find a Customer by Id +exports.findById = (req, res) => { + Donors.findById(req.params.customerId).then(customer => { + res.send(customer); + }) +}; + +// Update a Customer +exports.update = (req, res) => { + const id = req.params.customerId; + Donors.update( { firstname: req.body.firstname, lastname: req.body.lastname, age: req.body.age }, + { where: {id: req.params.customerId} } + ).then(() => { + res.status(200).send("updated successfully a customer with id = " + id); + }); +}; + +// Delete a Customer by Id +exports.delete = (req, res) => { + const id = req.params.customerId; + Donors.destroy({ + where: { id: id } + }).then(() => { + res.status(200).send('deleted successfully a customer with id = ' + id); + }); +}; \ No newline at end of file diff --git a/models/Campaigns.js b/app/models/campaigns.model.js similarity index 88% rename from models/Campaigns.js rename to app/models/campaigns.model.js index 4c97489..cf55878 100644 --- a/models/Campaigns.js +++ b/app/models/campaigns.model.js @@ -19,10 +19,5 @@ module.exports = (sequelize, DataTypes) => { freezeTableName: true, } ); - - Campaigns.associate = (models) => { - Campaigns.belongsTo(models.donors); - }; - return Campaigns; } \ No newline at end of file diff --git a/models/Donors.js b/app/models/donors.model.js similarity index 88% rename from models/Donors.js rename to app/models/donors.model.js index 5226d4e..eb32163 100644 --- a/models/Donors.js +++ b/app/models/donors.model.js @@ -19,10 +19,5 @@ module.exports = (sequelize, DataTypes) => { freezeTableName: true, } ); - - Donors.associate = (models) => { - Donors.hasMany(models.campaigns); - }; - return Donors; } \ No newline at end of file diff --git a/app/routes/donors.route.js b/app/routes/donors.route.js new file mode 100644 index 0000000..45f2b68 --- /dev/null +++ b/app/routes/donors.route.js @@ -0,0 +1,19 @@ +module.exports = function(app) { + + const donors = require('../controller/donors.controller.js'); + + // Create a new Donor + app.post('/api/donors', donors.create); + + // Retrieve all Donor + app.get('/api/donors', donors.findAll); + + // Retrieve a single Donor by Id + app.get('/api/donors/:DonorId', donors.findById); + + // Update a Donor with Id + app.put('/api/donors/:DonorId', donors.update); + + // Delete a Donor with Id + app.delete('/api/donors/:DonorId', donors.delete); +} \ No newline at end of file diff --git a/package.json b/package.json index f1b7cc1..01597f5 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ }, "homepage": "https://github.com/talksik/Ucharify_api#readme", "dependencies": { + "body-parser": "^1.18.3", "express": "^4.16.4", "mysql2": "^1.6.4", "sequelize": "^4.42.0" diff --git a/server.js b/server.js index ef2eaab..85262ee 100644 --- a/server.js +++ b/server.js @@ -2,29 +2,42 @@ const express = require('express'), app = express(), router = express.Router(), + bodyParser = require('body-parser'), port = process.env.PORT || 4200, - sequelize = require('./sequelize.js'); + db = require('./app/config/db.config.js'); + +app.use(bodyParser.json()) + +//verify connection to db +db.sequelize + .authenticate() + .then(() => { + console.log('Connection has been established successfully.'); + }) + .catch(err => { + console.error('Unable to connect to the database:', err); + }); + +// force: true will drop the table if it already exists +db.sequelize.sync({force: true}).then(() => { + console.log('Drop and Resync with { force: true }'); + }); + //define a route, usually this would be a bunch of routes imported from another file router.get('/', function (req, res, next) { res.send('Welcome to the Ucharify API'); }); -//add routes to express app -// routes(app); +//adding routes to Express app +require('./app/route/donors.route.js')(app); -//start Express server on defined port -app.listen(port); - -//log to console to let us know it's working -console.log('Ucharify API server started on: ' + port); - -// //verify connection to db -// sequelize -// .authenticate() -// .then(() => { -// console.log('Connection has been established successfully.'); -// }) -// .catch(err => { -// console.error('Unable to connect to the database:', err); -// }); +// Create a Server +var server = app.listen(port, function () { + + var host = server.address().address + var port = server.address().port + + //server is successful + console.log("App listening at http://%s:%s", host, port) +}) \ No newline at end of file From e6f7fecd6dfc797710f4053d4dcc89c5baab760c Mon Sep 17 00:00:00 2001 From: Arjun Patel Date: Fri, 4 Jan 2019 16:07:58 -0800 Subject: [PATCH 3/3] Base methods for Donors model --- app/config/db.config.js | 4 +- app/controllers/donors.controller.js | 64 ++++++++++++++++------------ app/models/donors.model.js | 5 ++- app/routes/donors.route.js | 10 ++--- server.js | 8 ++-- 5 files changed, 50 insertions(+), 41 deletions(-) diff --git a/app/config/db.config.js b/app/config/db.config.js index c697549..0f33f0d 100644 --- a/app/config/db.config.js +++ b/app/config/db.config.js @@ -1,6 +1,6 @@ const Sequelize = require('sequelize'), - DonorsModel = require('./models/donors.model.js'), - CampaignsModel = require('./models/campaigns.model.js'); + DonorsModel = require('../models/donors.model.js'), + CampaignsModel = require('../models/campaigns.model.js'); const host = 'am1shyeyqbxzy8gc.cbetxkdyhwsb.us-east-1.rds.amazonaws.com', diff --git a/app/controllers/donors.controller.js b/app/controllers/donors.controller.js index d257a93..5d0dd91 100644 --- a/app/controllers/donors.controller.js +++ b/app/controllers/donors.controller.js @@ -1,50 +1,58 @@ const db = require('../config/db.config.js'); const Donors = db.donors; -// Post a Customer +// Post a Donor exports.create = (req, res) => { // Save to MySQL database Donors.create({ - firstname: req.body.firstname, - lastname: req.body.lastname, - age: req.body.age - }).then(customer => { - // Send created customer to client - res.send(customer); + first_name: req.body.first_name, + middle_name: req.body.middle_name, + last_name: req.body.last_name, + email: req.body.email, + age: req.body.age, + phone: req.body.phone, + address: req.body.address, + city: req.body.city, + state: req.body.state, + country: req.body.country + }).then(donor => { + // Send created donor to client + res.send(donor); }); }; -// FETCH all Customers +// FETCH all Donors exports.findAll = (req, res) => { - Donors.findAll().then(customers => { - // Send all customers to Client - res.send(customers); + Donors.findAll().then(donors => { + // Send all donors to Client + res.send(donors); }); }; -// Find a Customer by Id +// Find a Donor by Id exports.findById = (req, res) => { - Donors.findById(req.params.customerId).then(customer => { - res.send(customer); + Donors.findById(req.params.donor_id).then(donor => { + res.send(donor); }) }; -// Update a Customer -exports.update = (req, res) => { - const id = req.params.customerId; - Donors.update( { firstname: req.body.firstname, lastname: req.body.lastname, age: req.body.age }, - { where: {id: req.params.customerId} } - ).then(() => { - res.status(200).send("updated successfully a customer with id = " + id); - }); -}; - -// Delete a Customer by Id +// Delete a Donor by Id exports.delete = (req, res) => { - const id = req.params.customerId; + const id = req.params.donor_id; Donors.destroy({ where: { id: id } }).then(() => { - res.status(200).send('deleted successfully a customer with id = ' + id); + res.status(200).send('deleted successfully a donor with id = ' + id); }); -}; \ No newline at end of file +}; + + +// // Update a Donor +// exports.update = (req, res) => { +// const id = req.params.donor_id; +// Donors.update( { firstname: req.body.firstname, lastname: req.body.lastname, age: req.body.age }, +// { where: {id: req.params.donorId} } +// ).then(() => { +// res.status(200).send("updated successfully a donor with id = " + id); +// }); +// }; \ No newline at end of file diff --git a/app/models/donors.model.js b/app/models/donors.model.js index eb32163..adebd74 100644 --- a/app/models/donors.model.js +++ b/app/models/donors.model.js @@ -9,11 +9,12 @@ module.exports = (sequelize, DataTypes) => { middle_name: DataTypes.STRING, last_name: DataTypes.STRING, email: DataTypes.STRING, - phone: DataTypes.STRING, + age: DataTypes.INTEGER, + phone: DataTypes.INTEGER, address: DataTypes.STRING, city: DataTypes.STRING, state: DataTypes.STRING, - country: DataTypes.STRING, + country: DataTypes.STRING }, { freezeTableName: true, diff --git a/app/routes/donors.route.js b/app/routes/donors.route.js index 45f2b68..b39734c 100644 --- a/app/routes/donors.route.js +++ b/app/routes/donors.route.js @@ -1,6 +1,6 @@ module.exports = function(app) { - const donors = require('../controller/donors.controller.js'); + const donors = require('../controllers/donors.controller.js'); // Create a new Donor app.post('/api/donors', donors.create); @@ -10,10 +10,10 @@ module.exports = function(app) { // Retrieve a single Donor by Id app.get('/api/donors/:DonorId', donors.findById); - - // Update a Donor with Id - app.put('/api/donors/:DonorId', donors.update); - + // Delete a Donor with Id app.delete('/api/donors/:DonorId', donors.delete); + + // // Update a Donor with Id + // app.put('/api/donors/:DonorId', donors.update); } \ No newline at end of file diff --git a/server.js b/server.js index 85262ee..4122275 100644 --- a/server.js +++ b/server.js @@ -30,14 +30,14 @@ router.get('/', function (req, res, next) { }); //adding routes to Express app -require('./app/route/donors.route.js')(app); +require('./app/routes/donors.route.js')(app); // Create a Server var server = app.listen(port, function () { - var host = server.address().address - var port = server.address().port + var host = server.address().address; + var port = server.address().port; //server is successful - console.log("App listening at http://%s:%s", host, port) + console.log(`App listening at port: ${port}`) }) \ No newline at end of file