import type { UniqueID } from "@repo/rdx-ddd"; import type { Result } from "@repo/rdx-utils"; import type { DirectoryDomainDTO } from "../../common/directory-domains"; import type { ResourceReferenceDTO } from "../../common/inventory"; import type { NetworkShareDTO } from "../../common/network-shares"; 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<{ smbAccessTypeId?: string; networkShares?: ReadonlyMap; directoryDomains?: ReadonlyMap; 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, creation?: { templateId: string; actorId: UniqueID } ): Promise< Result< { resource: Resource; actorNames: ReadonlyMap; directory?: DirectoryDomainDTO; networkShare?: NetworkShareDTO; }, ResourceCatalogError > >; }