48 lines
1.7 KiB
TypeScript
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()))
|
|
);
|
|
}
|