metis-desk/modules/companies/src/api/application/application-configuration-policy.ts
2026-10-25 01:19:17 +02:00

48 lines
1.7 KiB
TypeScript

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()))
);
}