From 598139c9803b210ea2d15388b9769dc59ce82df8 Mon Sep 17 00:00:00 2001 From: Arjun Patel Date: Fri, 25 Jan 2019 01:01:37 -0800 Subject: [PATCH] adding user model and necessary basic fields --- app/config/db.config.js | 3 ++ app/controllers/general/index.js | 3 +- app/controllers/general/user.controller.js | 31 +++++++++++++++++ app/migrations/20190125081542-create-user.js | 35 ++++++++++++++++++++ app/models/user.model.js | 21 ++++++++++++ app/routes/general.route.js | 3 ++ 6 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 app/controllers/general/user.controller.js create mode 100644 app/migrations/20190125081542-create-user.js create mode 100644 app/models/user.model.js diff --git a/app/config/db.config.js b/app/config/db.config.js index a7e4a70..0c8b96a 100644 --- a/app/config/db.config.js +++ b/app/config/db.config.js @@ -4,6 +4,7 @@ const Sequelize = require('sequelize'), CauseModel = require('../models/cause.model.js'), RegionModel = require('../models/region.model.js'), OrganizationModel = require('../models/organization.model.js'), + UserModel = require('../models/user.model.js'), associate = require('./associate'); const connection_uri = process.env.JAWSDB_MARIA_URL; @@ -38,11 +39,13 @@ const Grant = GrantModel(sequelize, Sequelize); const Cause = CauseModel(sequelize, Sequelize); const Region = RegionModel(sequelize, Sequelize); const Organization = OrganizationModel(sequelize, Sequelize); +const User = UserModel(sequelize, Sequelize); db.Donor = Donor; db.Grant = Grant; db.Cause = Cause; db.Region = Region; db.Organization = Organization; +db.User = User; // make associations with created models associate(db); diff --git a/app/controllers/general/index.js b/app/controllers/general/index.js index 904f222..a4dd74d 100644 --- a/app/controllers/general/index.js +++ b/app/controllers/general/index.js @@ -1,5 +1,6 @@ module.exports = { cause: require('./cause.controller'), region: require('./region.controller'), - organization: require('./organization.controller') + organization: require('./organization.controller'), + user: require('./user.controller') }; diff --git a/app/controllers/general/user.controller.js b/app/controllers/general/user.controller.js new file mode 100644 index 0000000..654ab16 --- /dev/null +++ b/app/controllers/general/user.controller.js @@ -0,0 +1,31 @@ +const db = require('../../config/db.config.js'), + errorMaker = require('../../helpers/error.maker'); + +const { Grant, Cause, Region, Organization, User } = db; + +// POST an email into user general model from given email +exports.addEmail = (req, res, next) => { + User.findAll({ + where: { + email: req.body.email + } + }) + .then(users => { + if (users.length >= 1) { + return next(errorMaker(409, `Email Exists: ${req.body.email}`)); + } else { + User.create({ + email: req.body.email + }) + .then(donor => { + // Send created user to client + return res.status(201).json({ + message: 'User created', + donor + }); + }) + .catch(error => next(error)); + } + }) + .catch(error => next(error)); +}; diff --git a/app/migrations/20190125081542-create-user.js b/app/migrations/20190125081542-create-user.js new file mode 100644 index 0000000..d87af00 --- /dev/null +++ b/app/migrations/20190125081542-create-user.js @@ -0,0 +1,35 @@ +'use strict'; +module.exports = { + up: (queryInterface, Sequelize) => { + return queryInterface.createTable('users', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + first_name: Sequelize.STRING, + last_name: Sequelize.STRING, + email: { + type: Sequelize.STRING, + validate: { + isEmail: true + }, + allowNull: false + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: new Date() + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: new Date() + } + }); + }, + down: (queryInterface, Sequelize) => { + return queryInterface.dropTable('users'); + } +}; diff --git a/app/models/user.model.js b/app/models/user.model.js new file mode 100644 index 0000000..0524ab1 --- /dev/null +++ b/app/models/user.model.js @@ -0,0 +1,21 @@ +'use strict'; +module.exports = (sequelize, DataTypes) => { + const User = sequelize.define('users', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + autoIncrement: true, + allowNull: false + }, + first_name: DataTypes.STRING, + last_name: DataTypes.STRING, + email: { + type: DataTypes.STRING, + validate: { + isEmail: true + }, + allowNull: false + } + }); + return User; +}; diff --git a/app/routes/general.route.js b/app/routes/general.route.js index 8d8499d..040bf2d 100644 --- a/app/routes/general.route.js +++ b/app/routes/general.route.js @@ -16,4 +16,7 @@ router.get('/organizations', controllers.organization.findAll); // limitted numer returned; empty input still returns orgs router.get('/organizations/:search', controllers.organization.searchOrgs); +// Add email to database from the landing page +router.post('/users/landing', controllers.user.addEmail); + module.exports = router;