import { CheckRulesOutput } from '../interfaces/check-rules.output'; import { TicketDto } from '../interfaces/ticket/ticket.dto'; import { AllowTransfer } from '../rules/transfer/allow-transfer'; import { OnlyFutureValidation } from '../rules/transfer/only-future-validation'; const canTransferRules = [AllowTransfer, OnlyFutureValidation]; export function canTransfer(ticket: TicketDto, withErrors = true): CheckRulesOutput | boolean { if (withErrors) { return checkTransferRules(ticket); } return checkTransferRules(ticket).isValid; } function checkTransferRules(ticket: TicketDto): CheckRulesOutput { const errors: Array = []; canTransferRules.forEach((currentTicketRule) => { const ruleToCheck = new currentTicketRule(); const isRuleValid: boolean = ruleToCheck.validate(ticket); if (!isRuleValid) { errors.push(ruleToCheck.name); } }); return { isValid: errors.length === 0, errors, }; }