Skip to content

Instantly share code, notes, and snippets.

@brianc
Last active December 20, 2015 16:59
Show Gist options
  • Save brianc/6165368 to your computer and use it in GitHub Desktop.
Save brianc/6165368 to your computer and use it in GitHub Desktop.
//move queries into a simple object
//to make the more explicit
var queries = {
getRestaurant: (restaurantId) {
var query = {
type: 'select'
, table: 'restaurants'
, columns: ['*']
, where: {id: restaurantId}
};
return db.builder.sql(query);
},
getCategoriesForRestaurant: (restaurantId) {
var query = {
type: 'select'
, table: 'categories'
, columns: ['*']
, where: {restaurant_id: restaurantId}
, order: {order: 'asc'}
}
return db.builder.sql(query);
},
getItemsForRestaurant: (restaurantId) {
var query = {
type: 'select'
, table: 'items'
, columns: ['*']
, where: {restaurant_id: restaurantId}
, order: {order: 'asc'}
}
return db.builder.sql(query);
}
};
module.exports.menu = function(req, res) {
var data = {
restaurant: null
, categories: null
, items: null
};
//introduce variable to describe query parameters
var restaurantId = parseInt(req.params.id);
var tasks = {
getRestaurant: function(callback) {
var sql = queries.getRestaurant(restaurantId);
db.query(sql.query, sql.values, function(error, results) {
if (error) return res.error(errors.internal.DB_FAILURE, error, callback);
data.restaurant = results[0];
return callback();
});
}
, getCategories: function(callback) {
var sql = queries.getCategoriesForRestaurant(restaurantId);
db.query(sql.query, sql.values, function(error, results) {
if (error) return res.error(errors.internal.DB_FAILURE, error, callback);
data.categories = results;
return callback();
});
}
, getItems: function(callback) {
var sql = queries.getCategoriesForRestaurant(restaurantId);
db.query(sql.query, sql.values, function(error, results) {
if (error) return res.error(errors.internal.DB_FAILURE, error, callback);
data.items = results;
return callback();
});
}
}
var done = function(error, results) {
if(error) return;
var menu = [];
var categoryIdMenuIndex = {};
for(var i=0; i<data.categories.length; i++) {
var category = data.categories[i];
category.items = [];
menu.push(category);
categoryIdMenuIndex[category.id] = i;
}
for(var i=0; i<data.items.length; i ++) {
var item = data.items[i];
var category = menu[categoryIdMenuIndex[item.category_id]];
category.items.push(item);
}
res.render('menu', {restaurant: data.restaurant, menu: menu}, function(error, html) {
if (error) return res.error(errors.internal.UNKNOWN, error);
res.render('index', {content: html}, function(error, html) {
if (error) return res.error(errors.internal.UNKNOWN, error);
return res.send(html);
})
});
}
utils.async.parallel(tasks, done);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment