From ae89f1de84a184db36ab3e11de5dff9fe8c84b8b Mon Sep 17 00:00:00 2001 From: Amelia Clarke Date: Mon, 7 Nov 2016 17:53:26 -0800 Subject: [PATCH 1/3] Created schema file for user widgets --- database/schema.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 database/schema.js diff --git a/database/schema.js b/database/schema.js new file mode 100644 index 0000000..cee035a --- /dev/null +++ b/database/schema.js @@ -0,0 +1,22 @@ +const mongoose = require('mongoose') + +mongoose.connect('mongodb://localhost/lizardboard') +const db= mongoose.connection +db.on('error', console.error.bind(console,'connection error:')) +db.once('open', function() { + console.log('connected') +}) + + +const widgetSchema = mongoose.Schema ({ + type: String, title: String, size: String, contents: String +}) +const userSchema = mongoose.Schema ({ + username: String, + widgets: [ widgetSchema ] +}) +const userWidgets = mongoose.model('userWidgets', userSchema) + +module.exports = { + userWidgets +} From 8a72ed0ed01361ede73d7088f40034263d699564 Mon Sep 17 00:00:00 2001 From: Amelia Clarke Date: Mon, 7 Nov 2016 17:53:50 -0800 Subject: [PATCH 2/3] Created routes and CRUD functions for widgets --- database/schema.js | 1 + routes/users.js | 89 ++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 88 insertions(+), 2 deletions(-) diff --git a/database/schema.js b/database/schema.js index cee035a..a835ef6 100644 --- a/database/schema.js +++ b/database/schema.js @@ -18,5 +18,6 @@ const userSchema = mongoose.Schema ({ const userWidgets = mongoose.model('userWidgets', userSchema) module.exports = { + db, userWidgets } diff --git a/routes/users.js b/routes/users.js index 4baa47e..5dc32da 100644 --- a/routes/users.js +++ b/routes/users.js @@ -1,9 +1,94 @@ const express = require('express'); +const { userWidgets, db } = require('../database/schema.js') const router = express.Router(); +const mongoose = require('mongoose') + /* GET users listing. */ -router.get('/', (request, response, next) => { - response.send('respond with a resource'); +router.get('/', ( request, response, next ) => { + response.send( 'respond with a resource' ); +}); + +/* GET widget */ +router.get('/widgets/:widgetId', ( request, response, next ) => { + const { widgetId } = request.params + + userWidgets.find( {'widgets._id': widgetId},function(error, widgets){ + return widgets + }) + .then( data => console.log('finished') ) }); +/* CREATE widgets */ +router.post('/:userId/widgets/create', (request, response, next ) => { + const { userId } = request.params + const { type, title, size, contents } = request.body + + const newWidget = { + type: type, + title: title, + size: size, + contents: contents + } + + userWidgets.findOneAndUpdate( + { _id: userId }, + { + $push: { + widgets: newWidget + } + }, + { upsert: true }, + function( error ) { + if( error ) console.log( error ) + } + ) +}) + +/* UPDATE widgets */ +router.post('/:userId/widgets/:widgetId/update', ( request, response, next ) => { + const { userId, widgetId } = request.params + const { type, title, size, contents } = request.body + + const updatedWidget = { + _id: widgetId, + type: type, + title: title, + size: size, + contents: contents + } + + userWidgets.findOneAndUpdate( + { _id: userId, widgets: { $elemMatch:{ _id: widgetId }}}, + { + $set: { + 'widgets.$': updatedWidget + } + }, + { upsert: true }, + function( error ) { + if( error ) console.log( error ) + } + ) +}) + + +/* DELETE widgets */ +router.post( '/:userId/widgets/:widgetId/delete', ( request, response, next ) => { + const { userId, widgetId } = request.params + + userWidgets.findOneAndUpdate( + { _id: userId }, + { + $pull: { + widgets: { _id: widgetId } + } + }, + {'new': true}, + function( error, data ){ + if( error ) console.log( error ) + } + ) +}) + module.exports = router; From 76dd5c5df9acd7e914c63a41fa295e1940454b51 Mon Sep 17 00:00:00 2001 From: Amelia Clarke Date: Tue, 8 Nov 2016 18:09:04 -0800 Subject: [PATCH 3/3] Created dashboard schema, updated user and widget schemas and split them into separate files --- database/DashboardSchema.js | 11 +++++++++++ database/User.js | 15 +++++++++++++++ database/UserSchema.js | 9 +++++++++ database/WidgetSchema.js | 13 +++++++++++++ database/schema.js | 23 ----------------------- routes/users.js | 25 ++++++++++++++++++++----- 6 files changed, 68 insertions(+), 28 deletions(-) create mode 100644 database/DashboardSchema.js create mode 100644 database/User.js create mode 100644 database/UserSchema.js create mode 100644 database/WidgetSchema.js delete mode 100644 database/schema.js diff --git a/database/DashboardSchema.js b/database/DashboardSchema.js new file mode 100644 index 0000000..c9279d4 --- /dev/null +++ b/database/DashboardSchema.js @@ -0,0 +1,11 @@ +const schemas = require('mongoose') +const WidgetSchema = require('./WidgetSchema') + +const DashboardSchema = schemas.Schema ({ + _user: {type: Number, ref: 'User'}, + widgets: [{type:schemas.Schema.Types.ObjectId, ref:'Widget'}] +}) + +const Dashboard = schemas.model('Dashboard', DashboardSchema) + +module.exports = { DashboardSchema } diff --git a/database/User.js b/database/User.js new file mode 100644 index 0000000..35d8bc2 --- /dev/null +++ b/database/User.js @@ -0,0 +1,15 @@ +const schemas = require('mongoose') +schemas.connect('mongodb://localhost/lizardboard') +const db= schemas.connection +const UserSchema = require('./UserSchema') +db.on('error', console.error.bind(console,'connection error:')) +db.once('open', function() { + console.log('connected') +}) + +const User = schemas.model('User', UserSchema) + +module.exports = { + db, + User +} diff --git a/database/UserSchema.js b/database/UserSchema.js new file mode 100644 index 0000000..7c9248c --- /dev/null +++ b/database/UserSchema.js @@ -0,0 +1,9 @@ +const schemas = require('mongoose') +const DashboardSchema = require('./DashboardSchema') + +const UserSchema = schemas.Schema ({ + username: String, + dashboards: [{type: schemas.Schema.Types.ObjectId, ref:'Dashboard'}] +}) + +module.exports = { UserSchema } diff --git a/database/WidgetSchema.js b/database/WidgetSchema.js new file mode 100644 index 0000000..2666d85 --- /dev/null +++ b/database/WidgetSchema.js @@ -0,0 +1,13 @@ +const schemas = require('mongoose') + +const WidgetSchema = schemas.Schema ({ + _dashboard:{ type:Number, ref:'Dashboard' }, + type: String, + title: String, + size: String, + contents: String +}) + +const Widget = schemas.model( 'Widget', WidgetSchema ) + +module.exports = { WidgetSchema } diff --git a/database/schema.js b/database/schema.js deleted file mode 100644 index a835ef6..0000000 --- a/database/schema.js +++ /dev/null @@ -1,23 +0,0 @@ -const mongoose = require('mongoose') - -mongoose.connect('mongodb://localhost/lizardboard') -const db= mongoose.connection -db.on('error', console.error.bind(console,'connection error:')) -db.once('open', function() { - console.log('connected') -}) - - -const widgetSchema = mongoose.Schema ({ - type: String, title: String, size: String, contents: String -}) -const userSchema = mongoose.Schema ({ - username: String, - widgets: [ widgetSchema ] -}) -const userWidgets = mongoose.model('userWidgets', userSchema) - -module.exports = { - db, - userWidgets -} diff --git a/routes/users.js b/routes/users.js index 5dc32da..9e4abff 100644 --- a/routes/users.js +++ b/routes/users.js @@ -1,5 +1,5 @@ const express = require('express'); -const { userWidgets, db } = require('../database/schema.js') +const { User, db } = require('../database/User.js') const router = express.Router(); const mongoose = require('mongoose') @@ -9,11 +9,26 @@ router.get('/', ( request, response, next ) => { response.send( 'respond with a resource' ); }); +router.post('/', ( request, response, next ) => { + const { username } = request.body + const newUser = new User({ + username: username, + dashboards: { + widgets: {} + } + }) + + newUser.save( (error) => { + if(error) return handleError(err) + }) + +}) + /* GET widget */ router.get('/widgets/:widgetId', ( request, response, next ) => { const { widgetId } = request.params - userWidgets.find( {'widgets._id': widgetId},function(error, widgets){ + User.find( {'widgets._id': widgetId},function(error, widgets){ return widgets }) .then( data => console.log('finished') ) @@ -31,7 +46,7 @@ router.post('/:userId/widgets/create', (request, response, next ) => { contents: contents } - userWidgets.findOneAndUpdate( + User.findOneAndUpdate( { _id: userId }, { $push: { @@ -58,7 +73,7 @@ router.post('/:userId/widgets/:widgetId/update', ( request, response, next ) => contents: contents } - userWidgets.findOneAndUpdate( + User.findOneAndUpdate( { _id: userId, widgets: { $elemMatch:{ _id: widgetId }}}, { $set: { @@ -77,7 +92,7 @@ router.post('/:userId/widgets/:widgetId/update', ( request, response, next ) => router.post( '/:userId/widgets/:widgetId/delete', ( request, response, next ) => { const { userId, widgetId } = request.params - userWidgets.findOneAndUpdate( + User.findOneAndUpdate( { _id: userId }, { $pull: {