import type { SoftwareInstallationValues } from "../domain/value-objects/software-installation-values.vo"; import type { SoftwareContext } from "./software-installation.repository"; export function softwareReferences(values: SoftwareInstallationValues, context: SoftwareContext) { const licenseId = values.licenseResourceId.getOrUndefined(); return ( context.assets.some((item) => item.id.equals(values.assetId)) && context.resources.some( (item) => item.id.equals(values.resourceId) && (item.usage === "application" || item.usage === "os") ) && (!licenseId || context.resources.some((item) => item.id.equals(licenseId) && item.usage === "license")) ); } export function softwareLicenseAvailable( values: SoftwareInstallationValues, context: SoftwareContext ) { const licenseId = values.licenseResourceId.getOrUndefined(); const today = new Date().toISOString().slice(0, 10); return ( !licenseId || context.resources.some( (item) => item.id.equals(licenseId) && item.usage === "license" && item.active && (!item.expiresOn || item.expiresOn >= today) ) ); } export function softwareAvailable(values: SoftwareInstallationValues, context: SoftwareContext) { return ( context.assets.some((item) => item.id.equals(values.assetId) && item.notRetired) && context.resources.some( (item) => item.id.equals(values.resourceId) && item.active && (item.usage === "application" || item.usage === "os") ) && softwareLicenseAvailable(values, context) ); }