import type { UniqueID } from "@repo/rdx-ddd"; import type { Result } from "@repo/rdx-utils"; import type { ResourceReferenceDTO } from "../../common/inventory"; import type { Resource } from "../domain/resource.aggregate"; import type { ResourceCatalog } from "../domain/resource-catalog.aggregate"; import type { ResourceCatalogError } from "../domain/resource-definition"; export type InventoryContext = Readonly<{ catalog: ResourceCatalog; resources: readonly Resource[]; actorNames: ReadonlyMap; references: readonly ResourceReferenceDTO[]; }>; export interface IResourceRepository { remove(companyId: UniqueID, id: UniqueID): Promise>; get(companyId: UniqueID): Promise>; save( companyId: UniqueID, action: (context: InventoryContext) => Result ): Promise< Result<{ resource: Resource; actorNames: ReadonlyMap }, ResourceCatalogError> >; }