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

Reply via email to