UNPKG

mgm

Version:

My generic modules

127 lines (104 loc) 3.85 kB
require('../core'); const moment = require('moment'); const RuleException = require('../exception/RuleException'); const BaseEntity = require('../model/BaseEntity'); const ConfigController = require('./ConfigController'); let registeredConverters = []; module.exports = class BaseController extends ConfigController { constructor() { super(); this.listEntity = []; this.entity = this.newEntity(); this.messages = []; this.registerConverters('DateConverter', 'StringConverter', 'IntegerConverter'); } registerConverters(...names) { names.forEach(nameConverter => { if (registeredConverters.find(converter => { converter.getName() === nameConverter }) === undefined) { registeredConverters.push(require(`../converter/${nameConverter}`).newInstance()); } }); } getConverter(nameConverter) { let converter = registeredConverters.find(converter => converter.getName() === nameConverter); if (converter === undefined) { throw new Error(`The class ${this.constructor.name} has not registered the converter with name ${nameConverter}`); } return converter; } newEntity() { throw new Error(`The class ${this.constructor.name} must overwrite the method 'newEntity'`); } getRenderOptions() { throw new Error(`The class ${this.constructor.name} must overwrite the method 'getRenderOptions'`); } getIndex(listName) { return parseInt(this.json.indexes[listName + 'SelectedIndex'], 10); } doClear() { this.entity = this.newEntity(); this.listEntity = []; } updateModel() { Object.keys(this.json.execute).forEach(key => { let paths = key.split("-"); let dest = this; let path = paths.shift(); while (paths.length > 0) { dest = dest[path]; path = paths.shift(); } dest[path] = this.getConverter(this.json.execute[key].converterName).convertToObject(this.json.execute[key].value); }); } render(res, result) { res.setHeader('Content-Type', 'application/json'); res.send(JSON.stringify(result)); } renderResponse(req, res) { let result = { messages: [], messageType: '', render: [] }; this.json.render.forEach(info => { let paths = info.id.split("-"); let source = this; let path = paths.shift(); while (paths.length > 0) { source = source[path]; path = paths.shift(); } if (source[path] instanceof Array) { result.render.push({ id: info.id, value: source[path] }); } else { let convertedValue; if (info.converterName) { convertedValue = this.getConverter(info.converterName).convertToString(source[path]); } else { convertedValue = source[path]; } result.render.push({ id: info.id, value: convertedValue }); } }); this.render(res, result); } renderError(e, req, res) { let result = { messages: e.message.split(',') }; if (e instanceof RuleException) { result['messageType'] = 'warn'; } else { result['messageType'] = 'error'; } console.error(e); this.render(res, result); } };