UNPKG

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
"use strict"; 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;