var Q = require('q') , _ = require('underscore') , validator = require('../util/validator') , CouchDB = require('../util/couch').CouchDB ; var schema = require('./couchdb-schema'); module.exports = function(couchServerURL,dbName) { var server = new CouchDB(couchServerURL,dbName); var designRe = /^_design\//; var codes = {}; function codeUnique(code) { if ( code in codes ) { return false; } else { codes[code] = true; return true; } } return server.get('/_all_docs') .then(function(allDocs){ return _.chain(allDocs.rows) .filter(function(doc){ return doc.id.match(designRe) === null; }) .reduce(function(memo, doc){ return memo.then(function(result){ return server.get(doc.id) .then(function(doc){ var valid = validator(doc,schema); if ( doc.type === "Question" && !codeUnique(doc.code) ) { valid.valid = false; valid.error = "Question code "+doc.code+" is not unique."; } result[doc._id] = valid; return result; }); }); }, Q.resolve({})) .value(); }).all(); };