2026-10-04 19:04:14 +00:00
|
|
|
import { Result } from "@repo/rdx-utils";
|
|
|
|
|
|
|
|
|
|
import { AssetCatalogError } from "../domain/asset-definition";
|
|
|
|
|
import { WorkstationValues } from "../domain/value-objects/workstation-values";
|
|
|
|
|
import type { Workstation } from "../domain/workstation.aggregate";
|
|
|
|
|
import type { WorkstationInput } from "../domain/workstation-values";
|
|
|
|
|
|
|
|
|
|
import type { InventoryContext } from "./asset.repository";
|
|
|
|
|
export function mapWorkstationInput(
|
|
|
|
|
input: WorkstationInput,
|
|
|
|
|
context: InventoryContext,
|
|
|
|
|
previous?: Workstation
|
|
|
|
|
) {
|
|
|
|
|
const mapped = WorkstationValues.create(input);
|
|
|
|
|
if (!mapped.isSuccess) {
|
|
|
|
|
return mapped;
|
|
|
|
|
}
|
|
|
|
|
const values = mapped.data.toPrimitive();
|
|
|
|
|
if (values.siteId && !context.sites.some((id) => id.toPrimitive() === values.siteId)) {
|
|
|
|
|
return Result.fail(new AssetCatalogError("SITE_NOT_FOUND"));
|
|
|
|
|
}
|
|
|
|
|
const person = context.people.find((item) => item.id.toPrimitive() === values.personId);
|
|
|
|
|
if (
|
|
|
|
|
values.personId &&
|
|
|
|
|
(!person || (!person.active && previous?.values.toPrimitive().personId !== values.personId))
|
|
|
|
|
) {
|
|
|
|
|
return Result.fail(new AssetCatalogError("PERSON_UNAVAILABLE"));
|
|
|
|
|
}
|
2026-10-05 07:53:29 +00:00
|
|
|
for (const id of [...values.assetIds, ...values.sharedAssetIds]) {
|
2026-10-04 19:04:14 +00:00
|
|
|
const asset = context.assets.find((item) => item.id.toPrimitive() === id);
|
|
|
|
|
if (!asset) {
|
|
|
|
|
return Result.fail(new AssetCatalogError("ASSET_NOT_FOUND"));
|
|
|
|
|
}
|
|
|
|
|
if (
|
|
|
|
|
values.active &&
|
|
|
|
|
context.workstations.some(
|
|
|
|
|
(item) =>
|
|
|
|
|
item.id.toPrimitive() !== previous?.id.toPrimitive() &&
|
|
|
|
|
item.values.active &&
|
2026-10-05 07:53:29 +00:00
|
|
|
(item.values.assetIds.some((assetId) => assetId.toPrimitive() === id) ||
|
|
|
|
|
(values.assetIds.includes(id) &&
|
|
|
|
|
item.values.sharedAssetIds.some((assetId) => assetId.toPrimitive() === id)))
|
2026-10-04 19:04:14 +00:00
|
|
|
)
|
|
|
|
|
) {
|
|
|
|
|
return Result.fail(new AssetCatalogError("ASSET_IN_WORKSTATION"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return mapped;
|
|
|
|
|
}
|