import type { ApplicationConfiguration } from "../domain/application-configuration.aggregate"; import type { ApplicationConfigurationValues } from "../domain/value-objects/application-configuration-values.vo"; import type { ApplicationContext } from "./application-configuration.repository"; export function applicationReferences( values: ApplicationConfigurationValues, context: ApplicationContext ) { return ( context.profiles.some((item) => item.id.equals(values.profileId)) && context.resources.some( (item) => item.id.equals(values.resourceId) && item.usage === "application" ) ); } export function applicationAvailable( values: ApplicationConfigurationValues, context: ApplicationContext ) { const profile = context.profiles.find((item) => item.id.equals(values.profileId)); return ( !!profile && profile.values.active && context.people.some((person) => person.id.equals(profile.values.personId) && person.active) && context.assets.some((asset) => asset.id.equals(profile.values.assetId) && asset.notRetired) && context.resources.some( (item) => item.id.equals(values.resourceId) && item.active && item.usage === "application" ) ); } /** Notas y retirada conservan su disponibilidad histórica; una nueva asociación siempre la exige. */ export function requiresAvailableApplication( values: ApplicationConfigurationValues, previous?: ApplicationConfiguration ) { return ( !previous || (["pending", "configured"].includes(values.state) && (previous.values.state !== values.state || previous.values.delivery !== values.delivery || previous.values.version.getOrUndefined() !== values.version.getOrUndefined())) ); }