UNPKG

alphascript-server

Version:

CRUD operations for mongo and other functionalities to get started quickly in any CMS project

108 lines (87 loc) 2.93 kB
var api = require('../../../'); module.exports = { getAll: getDatabases, getMetadata: function(req, res) { res.json(getMetadata(req)); }, //todo getDates: function(req, res) {} }; function getMetadata(req) { var models = { //common: getDatabaseInfo(api.common) }; for (var key in api.db) { if (typeof api.db[key] === 'function') models[key] = getDatabaseInfo(api.db[key](req)); else models[key] = getDatabaseInfo(api.db[key]); } return models; } function getDatabases(callback) { var connection = api.options.mongoose.createConnection(api.options.common, api.mongoOptions()); connection.on('open', function() { new api.options.mongoose.mongo.Admin(connection.db).listDatabases(function(err, result) { connection.close(); if (err) { api.error.log(err); return callback('Erro ao obter bases de dados (administrador)'); } callback(null, result.databases); }); }); connection.on('connected', function() { console.log('api admin db connected successfully'); }); connection.on('error', function(err) { api.error.log('api admin db error:' + err); }); connection.on('disconnected', function() { delete connection; console.log('api admin db disconnected'); }); } function getDatabaseInfo(db) { var collections = {}, subField; for (var collectionName in db) { var collection = db[collectionName]; collections[collectionName] = {}; for (var fieldName in collection.schema.paths) { if (fieldName === '__v') continue; var field = collection.schema.paths[fieldName]; var fields = {}; //agora só faz o primeiro nível | todo: recursive flattening if (typeof field.options.type === 'object') { if (field.options.type instanceof Array) { if (typeof field.options.type[0].type !== 'undefined') collections[collectionName][fieldName] = getDataType(field.options.type[0]); else { for (subField in field.options.type[0]) { collections[collectionName][fieldName + '.' + subField] = getDataType(field.options.type[0][subField]); } } } else { for (subField in field.options.type) { collections[collectionName][fieldName + '.' + subField] = getDataType(field.options.type[subField]); } } } else collections[collectionName][fieldName] = getDataType(field.options); } } return collections; } function getDataType(options) { var result = {}; if (typeof options.ref !== 'undefined') result.ref = options.ref; switch (typeof options.type) { case "object": result.type = /function ([^(]*)/.exec(options.type[0] + "")[1]; break; case "function": result.type = /function ([^(]*)/.exec(options.type + "")[1]; break; default: result.type = options.type; break; } return result; }