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