ddd-tool-kit
Version:
A development tool kit for using Domain Driven Design in your Web API Node.js
62 lines (61 loc) • 3.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SessionEntity = void 0;
const output_util_1 = require("../../../utils/output/output.util");
const entity_abstract_1 = require("../../../abstract/entity/entity.abstract");
const id_value_object_1 = require("../../../implementations/value-objects/id/id.value-object");
const ip_value_object_1 = require("../../../implementations/value-objects/ip/ip.value-object");
const throw_fail_output_util_1 = require("../../../utils/throw-fail-output/throw-fail-output.util");
const session_errors_1 = require("../../../implementations/entities/session/session.errors");
const date_value_object_1 = require("../../../implementations/value-objects/date/date.value-object");
const verify_all_props_exists_util_1 = require("../../../utils/verify-all-props-exists/verify-all-props-exists.util");
const verify_are_value_objects_util_1 = require("../../../utils/verify-are-value-objects/verify-are-value-objects.util");
class SessionEntity extends entity_abstract_1.Entity {
constructor(props) {
super(props);
this.EXPIRATION_SESSION_IN_DAYS = 30;
const defaultExpiresAt = date_value_object_1.DateValueObject.getDefault();
defaultExpiresAt.addDays(this.EXPIRATION_SESSION_IN_DAYS);
this.props.expiresAt = props.expiresAt ?? defaultExpiresAt;
this.props.loggedAt = props.loggedAt ?? date_value_object_1.DateValueObject.getDefault();
}
get ip() {
return this.props.ip;
}
get expiresAt() {
return this.props.expiresAt;
}
get loggedAt() {
return this.props.loggedAt;
}
renew(ip) {
const initIp = ip_value_object_1.IpValueObject.init({ value: ip });
if (initIp.isFailure)
return (0, throw_fail_output_util_1.throwFailOutput)(initIp);
const loggedAt = date_value_object_1.DateValueObject.getDefault();
const expiresAt = date_value_object_1.DateValueObject.getDefault();
expiresAt.addDays(this.EXPIRATION_SESSION_IN_DAYS);
this.props.loggedAt = loggedAt;
this.props.expiresAt = expiresAt;
this.props.id = id_value_object_1.IdValueObject.getDefault();
return output_util_1.Output.success(this.id);
}
sanitizeProps() { }
isValidProps() {
const valueObjects = ['ip', 'expiresAt', 'loggedAt'];
valueObjects.push(...this.defaultValueObjects);
const requiredProps = [...valueObjects];
const allPropsExists = (0, verify_all_props_exists_util_1.verifyAllPropsExists)(requiredProps, this);
const areValueObjects = (0, verify_are_value_objects_util_1.verifyAreValueObjects)(valueObjects, this);
return allPropsExists && areValueObjects;
}
static init(props) {
const session = new SessionEntity(props);
const isInvalidProps = !session.isValidProps();
if (isInvalidProps) {
return output_util_1.Output.fail(session_errors_1.INVALID_SESSION);
}
return output_util_1.Output.success(session);
}
}
exports.SessionEntity = SessionEntity;