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/routes/users.js b/routes/users.js index 4baa47e..9e4abff 100644 --- a/routes/users.js +++ b/routes/users.js @@ -1,9 +1,109 @@ const express = require('express'); +const { User, db } = require('../database/User.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' ); +}); + +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 + + User.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 + } + + User.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 + } + + User.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 + + User.findOneAndUpdate( + { _id: userId }, + { + $pull: { + widgets: { _id: widgetId } + } + }, + {'new': true}, + function( error, data ){ + if( error ) console.log( error ) + } + ) +}) + module.exports = router;