UNPKG

@unclepaul/allcountjs

Version:

The open source framework for rapid business application development with Node.js

40 lines (39 loc) 1.76 kB
var _ = require('underscore'); module.exports = function (entityDescriptionService, appUtil) { return { validateEntity: function (entityCrudId, entity, definedFieldsOnly) { var service = this; var entityDescription = entityDescriptionService.entityDescription(entityCrudId); var fieldNameToMessage = _.chain(entityDescription.allFields).map(function (field, fieldName) { var message = !definedFieldsOnly || definedFieldsOnly && !_.isUndefined(entity[fieldName]) ? service.validateField(field, entity[fieldName]) : undefined; if (message) { if (field.validationMessage) return [fieldName, field.validationMessage]; else return [fieldName, message]; } return undefined; }).filter(_.identity).object().value(); if (_.size(fieldNameToMessage) > 0) { throw new appUtil.ValidationError(fieldNameToMessage); } }, validateField: function (field, fieldValue) { if (field.isRequired && (_.isUndefined(fieldValue) || _.isNull(fieldValue))) { return "Required"; } else if (field.regex) { try { const r = new RegExp(field.regex); if (!r.test(fieldValue.toString())) return "Must match following expression: " + field.regex; else return undefined; } catch (e) { return e; } } return undefined; } }; };