metis-desk/modules/companies/src/api/application/application-configuration.repository.ts

34 lines
1.3 KiB
TypeScript
Raw Normal View History

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" | null;
}[];
actors: ReadonlyMap<string, string>;
}>;
export interface IApplicationConfigurationRepository {
remove(company: UniqueID, id: UniqueID): Promise<Result<void, ApplicationConfigurationError>>;
get(company: UniqueID): Promise<Result<ApplicationContext, ApplicationConfigurationError>>;
save(
company: UniqueID,
action: (
context: ApplicationContext
) => Result<ApplicationConfiguration, ApplicationConfigurationError>
): Promise<
Result<
{ configuration: ApplicationConfiguration; context: ApplicationContext },
ApplicationConfigurationError
>
>;
}