import type { UniqueID } from "@repo/rdx-ddd"; import type { Result } from "@repo/rdx-utils"; import type { ApplicationConfiguration } from "../domain/application-configuration.aggregate"; import type { ApplicationConfigurationError } from "../domain/application-configuration-values"; import type { WorkProfile } from "../domain/work-profile.aggregate"; export type ApplicationContext = Readonly<{ configurations: readonly ApplicationConfiguration[]; profiles: readonly WorkProfile[]; people: readonly { id: UniqueID; active: boolean }[]; assets: readonly { id: UniqueID; available: boolean }[]; resources: readonly { id: UniqueID; active: boolean; usage: "application" | "certificate" | "support" | "os" | null; }[]; actors: ReadonlyMap; }>; export interface IApplicationConfigurationRepository { remove(company: UniqueID, id: UniqueID): Promise>; get(company: UniqueID): Promise>; save( company: UniqueID, action: ( context: ApplicationContext ) => Result ): Promise< Result< { configuration: ApplicationConfiguration; context: ApplicationContext }, ApplicationConfigurationError > >; }