Everlive.Events.beforeRead(function(request, context, done) { done(); }); Everlive.Events.afterRead(function(request, response, context, done) { done(); }); Everlive.Events.beforeCreate(function(request, context, done) { done(); }); Everlive.Events.afterCreate(function(request, response, context, done) { calculateRating(request.data.MenuItem, done); }); Everlive.Events.beforeUpdate(function(request, context, done) { done(); }); Everlive.Events.afterUpdate(function(request, response, context, done) { if (request && request.data && request.data.$set && request.data.$set.MenuItem) { calculateRating(request.data.$set.MenuItem, done); } else { done(); } }); Everlive.Events.beforeDelete(function(request, context, done) { done(); }); Everlive.Events.afterDelete(function(request, response, context, done) { done(); }); var calculateRating = function(menuItem, done) { var filter = { "MenuItem" : menuItem, "State": 0 }; var options = { headers:{ "Authorization" : "Masterkey ", "X-Everlive-Filter" : JSON.stringify(filter) } }; Everlive.Http.get('https://api.everlive.com/v1//MenuItemRatings/', options, function(error, ratings) { if(error){ console.error(error); done(); } else { var totalRating = 0; for (var i = 0; i < ratings.data.Count; i++) { var itemRating = ratings.data.Result[i]; totalRating += (itemRating.Rating === null) ? 0 : parseInt(itemRating.Rating); console.log("rating - " + itemRating.Rating); console.log("total rating - " + totalRating); } var average = (totalRating * 5) / (5 * ratings.data.Count); console.log("average - " + average); var object = { "Rating" : average, "RatingsCount" : ratings.data.Count }; options = { headers:{ "Authorization" : "Masterkey " }, contentType: "application/json", body: JSON.stringify(object) }; Everlive.Http.put('https://api.everlive.com/v1//MenuItems/' + menuItem, options, function(error) { if(error){ console.error(JSON.stringify(error)); } done(); } ); } } ); };