‘use strict’;
/**
* @ngdoc service
* @name interceptcms.modelService
* @description
* # modelService
* Factory in the interceptcms.
*/
angular.module(‘interceptcms’)
.factory(‘modelService’, function($http, alert, RESOURCES) {
// LOAD MODELS ONCE AND SAVE TO cachedModels
var cachedModels = {};
// GET MODEL FROM API
// RETURNS OBJECT STRUCTURE AND DATA TYPES
// ADDS MODEL NAME PROPERTY
// PASSES TO AUGMENTMODEL
function getModel(modelName, callback) {
$http.get(RESOURCES.API_URL + modelName + "/model").success(function(obj) {
var model = {};
model = augmentModel(obj);
model._modelName = modelName;
if (callback) {
callback("model", model);
} else {
return model;
}
setModel(modelName, model);
}).error(function(err){
alert('warning', "Unable to get " + modelName + ".", err.message);
});
}
function setModel(modelName, model) {
cachedModels[modelName] = model;
}
// AUGMENTMODEL
// IDENTIFIES RECORD KEEPING DATA AS ARRAY
// IDENTIFIES RELATED MODELS WITHIN MODEL
// IDENTIFIES DROPDOWN MODELS WITHIN MODEL
// ADDS RESULT TO PROPERTY relatedModels
// UPDATE MODEL WITH GENERIC PROPERTIES
// CALLED BY GET MODEL
// ADDS VIEW SPECIFIC INFO
// TO GENERATE VIEW COMPONENTS FROM RELATED DATA SETS
function augmentModel(obj){
var relatedArray = [];
var dropdownArray = [];
for (var prop in obj) {
// TO DO REFACTOR RELATIONSHIP DESCRIPTION
// COLLECTION = ONE TO MANY
if (obj[prop].collection) {
// MONGO SPECIFIC
relatedArray.push(checkRelated(obj, prop, "collection", "collection"));
}
// MODEL = ONE TO ONE using VIA AS field REFERENCE
if (obj[prop].model) {
// REFACTOR
// USE GETDROPDOWNVALUES TO PROPULATE AS OBJECT
// WITH NAME PROPERTY & VALUE ARRAY
// MONGO SPECIFIC
dropdownArray.push(checkRelated(obj, prop, "model"));
}
}
obj._rkData = RESOURCES.RECORD_KEEPING_DATA;
obj._relatedModels = relatedArray;
obj._dropdownArray = dropdownArray;
return obj;
}
// CREATE RELATEDARRAY ELEMENTS
// CREATE dropdownArray ELEMENTS
// FOR VIEW
function checkRelated(obj, prop, type) {
//if (obj[prop][type]) {
var tmpObj = {};
tmpObj[prop] = obj[prop][type];
return tmpObj;
//}
}
var requestModel = function(modelName, callback) {
if (!cachedModels[modelName]) {
getModel(modelName, callback);
} else {
console.log("returning cached model:" + modelName);
return callback("model", cachedModels[modelName]);
}
};
var getCachedModel = function(modelName) {
var model = cachedModels[modelName];
var array = [];
for (var prop in model) {
array.push(prop);
}
return array;
};
var getDropDownModel = function(modelName) {
};
return {
requestModel: requestModel,
getCachedModel: getCachedModel,
getModel: getModel
};
});