metis-desk/modules/companies/src/api/application/remote-connection-policy.ts

44 lines
1.8 KiB
TypeScript
Raw Normal View History

2026-10-09 08:38:19 +00:00
import type { RemoteConnectionValues } from "../domain/value-objects/remote-connection-values.vo";
2026-10-06 16:44:21 +00:00
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.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.available)
) ||
(v.targetKind === "asset" &&
!context.assets.some((a) => a.id.toPrimitive() === v.targetId && a.available)) ||
(v.targetKind === "resource" &&
!context.resources.some((r) => r.id.toPrimitive() === v.targetId && r.active))
);
}