Skip to content

Instantly share code, notes, and snippets.

@robwormald
Last active August 29, 2015 14:05
Show Gist options
  • Save robwormald/da24a008da4cdc745929 to your computer and use it in GitHub Desktop.
Save robwormald/da24a008da4cdc745929 to your computer and use it in GitHub Desktop.
var q = require('Q');
var profileId = req.token;
var deliveryId = req.route.params.id;
var body = req.body;
// validate the received request body
var deliveryNotes = body.notes;
var deliveryItems = body.items;
if (!deliveryItems) {
return res.json(304, "Not modified");
}
//step 1...
var findDelivery = Delivery.findOne({id:deliveryId, recipient:profileId}).then(function(delivery){
if(!delivery){
throw new Error(403,"You can't review this delivery");
}
delivery.status = 'in_review';
delivery.notes = deliveryNotes;
return delivery.save();
});
function updateDeliveryItemStatuses(delivery){
return q.all(deliveryItems.map(function(item){
return DeliveryItem.update({id: item.id},{status: item.status});
}))
.then(function(updatedItems){
delivery.rejectedItems = updatedItems.filter(function(item){
return item.status == 'rejected';
});
if(delivery.rejectedItems.length){
delivery.status = 'rejected';
return delivery;
}
delivery.status = 'accepted';
return delivery;
})
}
function completeDelivery(delivery){
delivery.save().then(function(completedDelivery){
return res.json(200,delivery);
});
}
findDelivery.then(updateDeliveryItemStatuses,res.forbidden)
.then(completeDelivery,res.error)
.catch(res.error);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment