148 lines
4.6 KiB
TypeScript
148 lines
4.6 KiB
TypeScript
import { apiFetch, type ApiSettings } from "@govoplan/core-webui";
|
|
|
|
export type OrganizationUnitItem = {
|
|
id: string;
|
|
tenant_id: string;
|
|
unit_type_id?: string | null;
|
|
parent_id?: string | null;
|
|
slug: string;
|
|
name: string;
|
|
description?: string | null;
|
|
is_active: boolean;
|
|
settings: Record<string, unknown>;
|
|
created_at: string;
|
|
updated_at: string;
|
|
};
|
|
|
|
export type OrganizationFunctionItem = {
|
|
id: string;
|
|
tenant_id: string;
|
|
function_type_id?: string | null;
|
|
organization_unit_id: string;
|
|
slug: string;
|
|
name: string;
|
|
description?: string | null;
|
|
delegable: boolean;
|
|
act_in_place_allowed: boolean;
|
|
is_active: boolean;
|
|
settings: Record<string, unknown>;
|
|
created_at: string;
|
|
updated_at: string;
|
|
};
|
|
|
|
export type OrganizationModel = {
|
|
units: OrganizationUnitItem[];
|
|
functions: OrganizationFunctionItem[];
|
|
};
|
|
|
|
export type IdentityOption = {
|
|
id: string;
|
|
display_name?: string | null;
|
|
external_subject?: string | null;
|
|
source: string;
|
|
primary_account_id?: string | null;
|
|
account_ids: string[];
|
|
status: string;
|
|
};
|
|
|
|
export type IdentityListResponse = {
|
|
identities: IdentityOption[];
|
|
};
|
|
|
|
export type OrganizationFunctionAssignmentItem = {
|
|
id: string;
|
|
tenant_id: string;
|
|
identity_id: string;
|
|
account_id?: string | null;
|
|
function_id: string;
|
|
organization_unit_id: string;
|
|
applies_to_subunits: boolean;
|
|
source: string;
|
|
delegated_from_assignment_id?: string | null;
|
|
acting_for_account_id?: string | null;
|
|
valid_from?: string | null;
|
|
valid_until?: string | null;
|
|
is_active: boolean;
|
|
settings: Record<string, unknown>;
|
|
created_at: string;
|
|
updated_at: string;
|
|
};
|
|
|
|
export type OrganizationFunctionAssignmentList = {
|
|
assignments: OrganizationFunctionAssignmentItem[];
|
|
};
|
|
|
|
export type IdmSettings = {
|
|
tenant_id: string;
|
|
require_assignment_change_requests: boolean;
|
|
audit_detail_level: "summary" | "standard" | "full";
|
|
change_retention_days?: number | null;
|
|
settings: Record<string, unknown>;
|
|
created_at?: string | null;
|
|
updated_at?: string | null;
|
|
};
|
|
|
|
export type OrganizationFunctionAssignmentPayload = {
|
|
identity_id: string;
|
|
function_id: string;
|
|
account_id?: string | null;
|
|
applies_to_subunits?: boolean;
|
|
source?: string;
|
|
delegated_from_assignment_id?: string | null;
|
|
acting_for_account_id?: string | null;
|
|
valid_from?: string | null;
|
|
valid_until?: string | null;
|
|
is_active?: boolean;
|
|
settings?: Record<string, unknown>;
|
|
change_request_id?: string | null;
|
|
};
|
|
|
|
export type IdmSettingsPayload = Partial<Pick<IdmSettings, "require_assignment_change_requests" | "audit_detail_level" | "change_retention_days" | "settings">>;
|
|
|
|
function post<T, P extends Record<string, unknown>>(settings: ApiSettings, path: string, payload: P): Promise<T> {
|
|
return apiFetch<T>(settings, path, { method: "POST", body: JSON.stringify(payload) });
|
|
}
|
|
|
|
function patch<T, P extends Record<string, unknown>>(settings: ApiSettings, path: string, payload: P): Promise<T> {
|
|
return apiFetch<T>(settings, path, { method: "PATCH", body: JSON.stringify(payload) });
|
|
}
|
|
|
|
export function getOrganizationModel(settings: ApiSettings): Promise<OrganizationModel> {
|
|
return apiFetch<OrganizationModel>(settings, "/api/v1/organizations/model");
|
|
}
|
|
|
|
export function getOrganizationFunctionAssignments(settings: ApiSettings): Promise<OrganizationFunctionAssignmentList> {
|
|
return apiFetch<OrganizationFunctionAssignmentList>(settings, "/api/v1/idm/organization-function-assignments");
|
|
}
|
|
|
|
export function getIdmSettings(settings: ApiSettings): Promise<IdmSettings> {
|
|
return apiFetch<IdmSettings>(settings, "/api/v1/idm/settings");
|
|
}
|
|
|
|
export function patchIdmSettings(settings: ApiSettings, payload: IdmSettingsPayload): Promise<IdmSettings> {
|
|
return patch(settings, "/api/v1/idm/settings", payload);
|
|
}
|
|
|
|
export function searchOrganizationIdentityOptions(settings: ApiSettings, query = "", limit = 50): Promise<IdentityListResponse> {
|
|
const params = new URLSearchParams();
|
|
const trimmed = query.trim();
|
|
if (trimmed) params.set("query", trimmed);
|
|
params.set("limit", String(limit));
|
|
return apiFetch<IdentityListResponse>(settings, `/api/v1/idm/organization-identities?${params.toString()}`);
|
|
}
|
|
|
|
export function createOrganizationFunctionAssignment(
|
|
settings: ApiSettings,
|
|
payload: OrganizationFunctionAssignmentPayload
|
|
): Promise<OrganizationFunctionAssignmentItem> {
|
|
return post(settings, "/api/v1/idm/organization-function-assignments", payload);
|
|
}
|
|
|
|
export function patchOrganizationFunctionAssignment(
|
|
settings: ApiSettings,
|
|
id: string,
|
|
payload: Partial<OrganizationFunctionAssignmentPayload>
|
|
): Promise<OrganizationFunctionAssignmentItem> {
|
|
return patch(settings, `/api/v1/idm/organization-function-assignments/${encodeURIComponent(id)}`, payload);
|
|
}
|