metis-desk/modules/companies/src/api/application/software-installation-policy.ts

64 lines
2.1 KiB
TypeScript
Raw Normal View History

2026-10-24 23:19:17 +00:00
import type { SoftwareInstallation } from "../domain/software-installation.aggregate";
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)
);
}
2026-10-24 23:19:17 +00:00
/** Notas y retirada no crean una nueva dependencia de disponibilidad del producto. */
export function requiresAvailableSoftware(
values: SoftwareInstallationValues,
previous?: SoftwareInstallation
) {
return (
!previous ||
(["pending", "configured"].includes(values.state) &&
(previous.values.state !== values.state ||
previous.values.version.getOrUndefined() !== values.version.getOrUndefined()))
);
}