50 lines
1.8 KiB
TypeScript
50 lines
1.8 KiB
TypeScript
import type { RemoteConnectionValues } from "../domain/value-objects/remote-connection-values.vo";
|
|
|
|
import type { RemoteContext } from "./remote-connection.repository";
|
|
import { teleworkAuthorizationState } from "./telework-authorization-policy";
|
|
|
|
export function remoteReferences(values: RemoteConnectionValues, context: RemoteContext) {
|
|
const v = values.toPrimitive();
|
|
|
|
return (
|
|
context.people.some((p) => p.id.equals(values.personId)) &&
|
|
(!v.sourceAssetId || context.assets.some((a) => a.id.toPrimitive() === v.sourceAssetId)) &&
|
|
(!v.siteId || context.sites.some((s) => s.id.toPrimitive() === v.siteId)) &&
|
|
(v.targetKind === "network" ||
|
|
(v.targetKind === "asset"
|
|
? context.assets.some((a) => a.id.toPrimitive() === v.targetId)
|
|
: context.resources.some((r) => r.id.toPrimitive() === v.targetId)))
|
|
);
|
|
}
|
|
|
|
export function remoteAuthorizationEffective(
|
|
values: RemoteConnectionValues,
|
|
context: RemoteContext
|
|
) {
|
|
const authorization = context.authorizations.find((item) =>
|
|
item.values.personId.equals(values.personId)
|
|
);
|
|
|
|
return Boolean(authorization && teleworkAuthorizationState(authorization, context).effective);
|
|
}
|
|
|
|
export function remoteNeedsReview(values: RemoteConnectionValues, context: RemoteContext) {
|
|
if (values.closed) {
|
|
return false;
|
|
}
|
|
const v = values.toPrimitive();
|
|
|
|
return (
|
|
values.state === "removal_pending" ||
|
|
!remoteAuthorizationEffective(values, context) ||
|
|
Boolean(
|
|
v.sourceAssetId &&
|
|
!context.assets.some((a) => a.id.toPrimitive() === v.sourceAssetId && a.notRetired)
|
|
) ||
|
|
(v.targetKind === "asset" &&
|
|
!context.assets.some((a) => a.id.toPrimitive() === v.targetId && a.notRetired)) ||
|
|
(v.targetKind === "resource" &&
|
|
!context.resources.some((r) => r.id.toPrimitive() === v.targetId && r.active))
|
|
);
|
|
}
|