var express = require("express") , HTTPResult = require("../util/http-result") , _ = require("underscore") ; module.exports = function(couch,schema) { var exports = {}; var util = require('./util')(couch,schema); var app = exports.app = express(); var getTopics = exports.getTopics = function(sub) { var url = '_design/questions/_view/'+(sub||'all')+'_topics'; return couch.get(url,{query:{reduce:true,group:true}}) .handle({ '-1': _.identity, 200: function(result) { return _.map(result.rows, function(item) { return {name:item.key, count:item.value}; }); }, default: util.handleUnknownResponse }); }; var getTopicsWithCategory = exports.getTopicsWithCategory = function(category,sub) { var url = '_design/questions/_view/'+(sub||'all'); return couch.get(url,{query:{reduce:true,group:true,group_level:2,startkey:[category],endkey:[category,{}]}}) .handle({ '-1': _.identity, 200: function(result) { return _.map(result.rows, function(item) { return { name:item.key[1], count:item.value }; }); }, default: util.handleUnknownResponse }); }; app.get('/', util.ensureMIME(util.JSON_MIME), function(req,res) { var sub = 'published' in req.query && 'published'; var hr; if ( 'category' in req.query ) { hr = getTopicsWithCategory(req.query.category,sub); } else { hr = getTopics(sub); } hr.handle({'-1': util.handleException}) .handle(res.send.bind(res)); }); return exports; };