@kerthin/domain
Version:
Kerthin Domain (based on DDD)
46 lines • 2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DomainValueObject = void 0;
const ramda_1 = require("ramda");
const utils_1 = require("../utils");
const validate_1 = require("./validate");
const utils_2 = require("@kerthin/utils");
class DomainValueObject {
constructor(value) {
this.value = value;
this.validator = new validate_1.ValidatorExecutor(new validate_1.ValueObjectValidator());
}
toValue() {
return this.value;
}
validate(action) {
const target = this['constructor'];
const meta = utils_1.Metadata.getTargetMetadata(target);
const validators = meta.validators;
const getValidations = (0, ramda_1.compose)((0, ramda_1.filter)(utils_2.isNotEmptyOrNil), (0, ramda_1.map)((validator) => validator(this.toValue())));
const addValidations = (0, ramda_1.forEach)((validation) => this.validator.add(validation));
addValidations(getValidations((validators === null || validators === void 0 ? void 0 : validators[utils_1.Actions.DEFAULT_TO]) || []));
switch (action) {
case utils_1.Actions.ON_CREATE:
addValidations(getValidations((validators === null || validators === void 0 ? void 0 : validators[utils_1.Actions.ON_CREATE]) || []));
break;
case utils_1.Actions.ON_UPDATE:
addValidations(getValidations((validators === null || validators === void 0 ? void 0 : validators[utils_1.Actions.ON_UPDATE]) || []));
break;
default:
break;
}
return this.validator.throwException();
}
equals(vo) {
if (vo === null || vo === undefined) {
return false;
}
if (vo.value === undefined) {
return false;
}
return JSON.stringify(this.value) === JSON.stringify(vo.value);
}
}
exports.DomainValueObject = DomainValueObject;
//# sourceMappingURL=domain-value-object.js.map