Ejegg has uploaded a new change for review. https://gerrit.wikimedia.org/r/198093
Change subject: Add RESTful add/delete widget routes ...................................................................... Add RESTful add/delete widget routes No longer need to gather and re-send all board data just to add or delete a widget instance. To add, POST { instanceId: 23 } to /board/5/widgets To delete, DELETE /board/5/widgets/23 Change-Id: I729cc92d3b33af874f75bcabfd3ec0374f97eb05 --- M persistence.js M routes/board.js M server.js M src/components/app-content/app-content.js 4 files changed, 55 insertions(+), 38 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/wikimedia/fundraising/dash refs/changes/93/198093/1 diff --git a/persistence.js b/persistence.js index be17205..dd1c098 100644 --- a/persistence.js +++ b/persistence.js @@ -169,12 +169,22 @@ saveBoard: function( board ) { var connection = getConnection(), insert = 'INSERT INTO dash_board ( owner_id, display_name, description, is_shared ) VALUES ( ?, ?, ?, ? )', + addWidget = 'INSERT INTO dash_widget_instance_board ( instance_id, board_id, widget_position ) SELECT ?, b.id, COALESCE( MAX( widget_position ), 0 ) + 1 FROM dash_board b LEFT JOIN dash_widget_instance_board i ON b.id = i.board_id WHERE b.id = ? AND b.owner_id = ?', + addWidgetParams = [ board.addWidget, board.id, board.ownerId ], + deleteWidget = 'DELETE FROM dash_widget_instance_board WHERE instance_id = ? AND board_id = ? AND EXISTS( SELECT 1 FROM dash_board WHERE id = ? AND owner_id = ? )', + deleteWidgetParams = [ board.deleteWidget, board.id, board.id, board.ownerId ], insertParams = [ board.ownerId, board.displayName, board.description, board.isShared ? 1 : 0 ], update = 'UPDATE dash_board set display_name = ?, description = ?, is_shared = ? WHERE id = ? AND owner_id = ?', updateParams = [ board.displayName, board.description, board.isShared ? 1 : 0, board.id, board.ownerId ], deleteWidgets = 'DELETE FROM dash_widget_instance_board WHERE board_id = ?'; if ( board.id ) { + if ( board.addWidget ) { + return connection.query( addWidget, addWidgetParams ); + } + if ( board.deleteWidget ) { + return connection.query( deleteWidget, deleteWidgetParams ); + } return connection.query( update, updateParams ).then( function( dbResults ) { if ( dbResults[0].affectedRows !== 1 ) { // Either the board doesn't exist or it's not ours diff --git a/routes/board.js b/routes/board.js index 17030bd..d8e3727 100644 --- a/routes/board.js +++ b/routes/board.js @@ -24,5 +24,25 @@ }, function( error ) { res.json( { error: error } ); }); + }, + addWidget: function( req, res ) { + var board = { + ownerId: req.session.passport.user.localId, + id: req.params.id, + addWidget: req.body.instanceId + }; + persistence.saveBoard( board ).then( function() { + res.json( { success: true, id: board.id } ); + } ); + }, + deleteWidget: function( req, res ) { + var board = { + ownerId: req.session.passport.user.localId, + id: req.params.id, + deleteWidget: req.params.instanceId + }; + persistence.saveBoard( board ).then( function() { + res.json( { success: true, id: board.id } ); + } ); } }; diff --git a/server.js b/server.js index fbea8a9..7a8d077 100644 --- a/server.js +++ b/server.js @@ -91,6 +91,8 @@ app.post( '/board', loginCheck, routes.board.save ); app.put( '/board/:id', loginCheck, routes.board.save ); app.get( '/board/:id', loginCheck, routes.board.get ); +app.post( '/board/:id/widgets', loginCheck, routes.board.addWidget ); +app.delete( '/board/:id/widgets/:instanceId', loginCheck, routes.board.deleteWidget ); /*jslint -W024*/ app.use( express.static( __dirname + ( config.debug ? '/src' : '/dist' ) ) ); diff --git a/src/components/app-content/app-content.js b/src/components/app-content/app-content.js index 24ecfa0..2c52b32 100644 --- a/src/components/app-content/app-content.js +++ b/src/components/app-content/app-content.js @@ -38,52 +38,37 @@ }); self.addWidgetToBoard = function( event, data ){ - var widgetIDToAdd; - - $.ajax({ + $.ajax( { method: 'POST', url: '/widget-instance', contentType: 'application/json; charset=UTF-8', - data: JSON.stringify({ + data: JSON.stringify( { widgetId: event.id, displayName: 'My ' + event.displayName, isShared: false - }), + } ), success: function( data ) { - widgetIDToAdd = data.id; var gettingBoard, defaultBoardConfig; - - if( self.userdata().defaultBoard !== parseInt( self.displayedBoard().id, 10) ){ - gettingBoard = $.ajax({ - url: '/board/' + self.userdata().defaultBoard, - success: function( stuff ) { - defaultBoardConfig = stuff; - } - }); - } else { - defaultBoardConfig = self.displayedBoard(); - gettingBoard = $.Deferred().resolve(defaultBoardConfig).promise(); - } - - $.when( gettingBoard ).then( function( returnedData ){ - defaultBoardConfig = returnedData; - defaultBoardConfig.widgets.push(data.id); - - $.ajax({ - method: 'PUT', - url: '/board/' + self.userdata().defaultBoard, - contentType: 'application/json; charset=UTF-8', - data: JSON.stringify( defaultBoardConfig ), - success: function( stuff ) { - //change the look of the add widget button - $( '#add-widget-' + event.id ).hide(); - $( '#saved-widget-' + event.id ).removeClass( 'hide' ); - } - }); - }); - - + $.ajax( { + method: 'POST', + url: '/board/' + self.userdata().defaultBoard + '/widgets', + contentType: 'application/json; charset=UTF-8', + data: JSON.stringify( { + instanceId: data.id + } ), + success: function( stuff ) { + //change the look of the add widget button + $( '#add-widget-' + event.id ).hide(); + $( '#saved-widget-' + event.id ).removeClass( 'hide' ); + //refresh the displayed board + if ( parseInt( self.displayedBoard().id, 10 ) === self.userdata().defaultBoard ) { + $.get( 'board/' + self.userdata().defaultBoard, function( moredata ){ + self.displayedBoard( moredata ); + }); + } + } + } ); } - }); + } ); }; -- To view, visit https://gerrit.wikimedia.org/r/198093 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I729cc92d3b33af874f75bcabfd3ec0374f97eb05 Gerrit-PatchSet: 1 Gerrit-Project: wikimedia/fundraising/dash Gerrit-Branch: master Gerrit-Owner: Ejegg <eeggles...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits