366 lines
12 KiB
TypeScript
366 lines
12 KiB
TypeScript
import { apiFetch, apiPatchJson, apiPostJson, type ApiSettings } from "@govoplan/core-webui";
|
|
|
|
export type OrganizationUnitTypeItem = {
|
|
id: string;
|
|
tenant_id: string;
|
|
slug: string;
|
|
name: string;
|
|
description?: string | null;
|
|
is_active: boolean;
|
|
settings: Record<string, unknown>;
|
|
created_at: string;
|
|
updated_at: string;
|
|
};
|
|
|
|
export type OrganizationStructureKind = "hierarchy" | "network" | "membership" | "classification";
|
|
export type OrganizationAuditDetailLevel = "summary" | "standard" | "full";
|
|
|
|
export type OrganizationSettingsItem = {
|
|
id?: string | null;
|
|
tenant_id: string;
|
|
allow_tenant_model_customization: boolean;
|
|
require_model_change_requests: boolean;
|
|
audit_detail_level: OrganizationAuditDetailLevel;
|
|
change_retention_days?: number | null;
|
|
settings: Record<string, unknown>;
|
|
created_at?: string | null;
|
|
updated_at?: string | null;
|
|
};
|
|
|
|
export type OrganizationSettingsUpdatePayload = {
|
|
allow_tenant_model_customization?: boolean;
|
|
require_model_change_requests?: boolean;
|
|
audit_detail_level?: OrganizationAuditDetailLevel;
|
|
change_retention_days?: number | null;
|
|
settings?: Record<string, unknown>;
|
|
};
|
|
|
|
export type OrganizationStructureItem = {
|
|
id: string;
|
|
tenant_id: string;
|
|
slug: string;
|
|
name: string;
|
|
description?: string | null;
|
|
structure_kind: OrganizationStructureKind | string;
|
|
is_active: boolean;
|
|
settings: Record<string, unknown>;
|
|
created_at: string;
|
|
updated_at: string;
|
|
};
|
|
|
|
export type OrganizationRelationTypeItem = {
|
|
id: string;
|
|
tenant_id: string;
|
|
structure_id?: string | null;
|
|
slug: string;
|
|
name: string;
|
|
description?: string | null;
|
|
source_unit_type_id?: string | null;
|
|
target_unit_type_id?: string | null;
|
|
is_hierarchical: boolean;
|
|
allow_cycles: boolean;
|
|
is_active: boolean;
|
|
settings: Record<string, unknown>;
|
|
created_at: string;
|
|
updated_at: string;
|
|
};
|
|
|
|
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 OrganizationRelationItem = {
|
|
id: string;
|
|
tenant_id: string;
|
|
structure_id: string;
|
|
relation_type_id: string;
|
|
source_unit_id: string;
|
|
target_unit_id: string;
|
|
valid_from?: string | null;
|
|
valid_until?: string | null;
|
|
is_active: boolean;
|
|
settings: Record<string, unknown>;
|
|
created_at: string;
|
|
updated_at: string;
|
|
};
|
|
|
|
export type OrganizationFunctionTypeItem = {
|
|
id: string;
|
|
tenant_id: string;
|
|
slug: string;
|
|
name: string;
|
|
description?: string | null;
|
|
organization_unit_type_id?: string | null;
|
|
delegable: boolean;
|
|
act_in_place_allowed: boolean;
|
|
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 = {
|
|
unit_types: OrganizationUnitTypeItem[];
|
|
structures: OrganizationStructureItem[];
|
|
relation_types: OrganizationRelationTypeItem[];
|
|
units: OrganizationUnitItem[];
|
|
relations: OrganizationRelationItem[];
|
|
function_types: OrganizationFunctionTypeItem[];
|
|
functions: OrganizationFunctionItem[];
|
|
};
|
|
|
|
export type OrganizationTemplateVersion = {
|
|
id: string;
|
|
template_id: string;
|
|
version: string;
|
|
status: string;
|
|
definition_sha256: string;
|
|
release_notes?: string | null;
|
|
published_at?: string | null;
|
|
};
|
|
|
|
export type OrganizationTemplateCatalogItem = {
|
|
id: string;
|
|
slug: string;
|
|
name: string;
|
|
description?: string | null;
|
|
versions: OrganizationTemplateVersion[];
|
|
};
|
|
|
|
export type OrganizationTemplateCatalog = {
|
|
templates: OrganizationTemplateCatalogItem[];
|
|
};
|
|
|
|
export type OrganizationModelInstantiation = {
|
|
id: string;
|
|
tenant_id: string;
|
|
template_id: string;
|
|
template_version_id: string;
|
|
source_definition_sha256: string;
|
|
status: string;
|
|
object_counts: Record<string, number>;
|
|
provenance: Record<string, unknown>;
|
|
created_at: string;
|
|
updated_at: string;
|
|
};
|
|
|
|
export type OrganizationUpgradeDecisionAction = "keep_local" | "use_target" | "map_to";
|
|
|
|
export type OrganizationUpgradeDiffEntry = {
|
|
id: string;
|
|
collection: string;
|
|
key: string;
|
|
classification: string;
|
|
requires_decision: boolean;
|
|
base?: Record<string, unknown> | null;
|
|
local?: Record<string, unknown> | null;
|
|
target?: Record<string, unknown> | null;
|
|
allowed_actions: OrganizationUpgradeDecisionAction[];
|
|
};
|
|
|
|
export type OrganizationModelUpgrade = {
|
|
id: string;
|
|
tenant_id: string;
|
|
template_id: string;
|
|
source_instantiation_id: string;
|
|
source_template_version_id: string;
|
|
target_template_version_id: string;
|
|
status: string;
|
|
revision: number;
|
|
preview: {
|
|
entries: OrganizationUpgradeDiffEntry[];
|
|
counts: Record<string, number>;
|
|
requires_decisions: number;
|
|
blocking_invalid_references: number;
|
|
silent_mutation: boolean;
|
|
};
|
|
decisions: Record<string, { action: OrganizationUpgradeDecisionAction; target_key?: string | null }>;
|
|
created_at: string;
|
|
updated_at: string;
|
|
};
|
|
|
|
export type OrganizationModelUpgradeList = {
|
|
current_instantiation?: OrganizationModelInstantiation | null;
|
|
upgrades: OrganizationModelUpgrade[];
|
|
};
|
|
|
|
export type OrganizationChangeRequestPayload = {
|
|
change_request_id?: string | null;
|
|
};
|
|
|
|
export type SluggedCreatePayload = {
|
|
slug?: string | null;
|
|
name: string;
|
|
description?: string | null;
|
|
is_active?: boolean;
|
|
settings?: Record<string, unknown>;
|
|
} & OrganizationChangeRequestPayload;
|
|
|
|
export type StructureCreatePayload = SluggedCreatePayload & {
|
|
structure_kind: OrganizationStructureKind;
|
|
};
|
|
|
|
export type RelationTypeCreatePayload = SluggedCreatePayload & {
|
|
structure_id?: string | null;
|
|
source_unit_type_id?: string | null;
|
|
target_unit_type_id?: string | null;
|
|
is_hierarchical: boolean;
|
|
allow_cycles: boolean;
|
|
};
|
|
|
|
export type UnitCreatePayload = SluggedCreatePayload & {
|
|
unit_type_id?: string | null;
|
|
parent_id?: string | null;
|
|
};
|
|
|
|
export type RelationCreatePayload = {
|
|
structure_id: string;
|
|
relation_type_id: string;
|
|
source_unit_id: string;
|
|
target_unit_id: string;
|
|
is_active?: boolean;
|
|
settings?: Record<string, unknown>;
|
|
} & OrganizationChangeRequestPayload;
|
|
|
|
export type FunctionTypeCreatePayload = SluggedCreatePayload & {
|
|
organization_unit_type_id?: string | null;
|
|
delegable: boolean;
|
|
act_in_place_allowed: boolean;
|
|
};
|
|
|
|
export type FunctionCreatePayload = SluggedCreatePayload & {
|
|
organization_unit_id: string;
|
|
function_type_id?: string | null;
|
|
delegable?: boolean | null;
|
|
act_in_place_allowed?: boolean | null;
|
|
};
|
|
|
|
export function getOrganizationModel(settings: ApiSettings): Promise<OrganizationModel> {
|
|
return apiFetch<OrganizationModel>(settings, "/api/v1/organizations/model");
|
|
}
|
|
|
|
export function getOrganizationTemplateCatalog(settings: ApiSettings): Promise<OrganizationTemplateCatalog> {
|
|
return apiFetch<OrganizationTemplateCatalog>(settings, "/api/v1/organizations/model-templates");
|
|
}
|
|
|
|
export function getOrganizationModelUpgrades(settings: ApiSettings): Promise<OrganizationModelUpgradeList> {
|
|
return apiFetch<OrganizationModelUpgradeList>(settings, "/api/v1/organizations/model-upgrades");
|
|
}
|
|
|
|
export function previewOrganizationModelUpgrade(settings: ApiSettings, targetTemplateVersionId: string): Promise<OrganizationModelUpgrade> {
|
|
return apiPostJson(settings, "/api/v1/organizations/model-upgrades/preview", {
|
|
target_template_version_id: targetTemplateVersionId,
|
|
idempotency_key: crypto.randomUUID()
|
|
});
|
|
}
|
|
|
|
export function cancelOrganizationModelUpgrade(settings: ApiSettings, upgradeId: string, expectedRevision: number): Promise<OrganizationModelUpgrade> {
|
|
return apiPostJson(settings, `/api/v1/organizations/model-upgrades/${encodeURIComponent(upgradeId)}/cancel`, {
|
|
expected_revision: expectedRevision
|
|
});
|
|
}
|
|
|
|
export function applyOrganizationModelUpgrade(
|
|
settings: ApiSettings,
|
|
upgradeId: string,
|
|
expectedRevision: number,
|
|
decisions: Record<string, { action: OrganizationUpgradeDecisionAction; target_key?: string }>,
|
|
changeRequestId?: string
|
|
): Promise<{ upgrade: OrganizationModelUpgrade; instantiation: OrganizationModelInstantiation }> {
|
|
return apiPostJson(settings, `/api/v1/organizations/model-upgrades/${encodeURIComponent(upgradeId)}/apply`, {
|
|
expected_revision: expectedRevision,
|
|
decisions,
|
|
change_request_id: changeRequestId || null
|
|
});
|
|
}
|
|
|
|
export function getOrganizationSettings(settings: ApiSettings): Promise<OrganizationSettingsItem> {
|
|
return apiFetch<OrganizationSettingsItem>(settings, "/api/v1/organizations/settings");
|
|
}
|
|
|
|
export function patchOrganizationSettings(settings: ApiSettings, payload: OrganizationSettingsUpdatePayload): Promise<OrganizationSettingsItem> {
|
|
return apiPatchJson(settings, "/api/v1/organizations/settings", payload);
|
|
}
|
|
|
|
export function createUnitType(settings: ApiSettings, payload: SluggedCreatePayload): Promise<OrganizationUnitTypeItem> {
|
|
return apiPostJson(settings, "/api/v1/organizations/unit-types", payload);
|
|
}
|
|
|
|
export function patchUnitType(settings: ApiSettings, id: string, payload: Partial<SluggedCreatePayload>): Promise<OrganizationUnitTypeItem> {
|
|
return apiPatchJson(settings, `/api/v1/organizations/unit-types/${encodeURIComponent(id)}`, payload);
|
|
}
|
|
|
|
export function createStructure(settings: ApiSettings, payload: StructureCreatePayload): Promise<OrganizationStructureItem> {
|
|
return apiPostJson(settings, "/api/v1/organizations/structures", payload);
|
|
}
|
|
|
|
export function patchStructure(settings: ApiSettings, id: string, payload: Partial<StructureCreatePayload>): Promise<OrganizationStructureItem> {
|
|
return apiPatchJson(settings, `/api/v1/organizations/structures/${encodeURIComponent(id)}`, payload);
|
|
}
|
|
|
|
export function createRelationType(settings: ApiSettings, payload: RelationTypeCreatePayload): Promise<OrganizationRelationTypeItem> {
|
|
return apiPostJson(settings, "/api/v1/organizations/relation-types", payload);
|
|
}
|
|
|
|
export function patchRelationType(settings: ApiSettings, id: string, payload: Partial<RelationTypeCreatePayload>): Promise<OrganizationRelationTypeItem> {
|
|
return apiPatchJson(settings, `/api/v1/organizations/relation-types/${encodeURIComponent(id)}`, payload);
|
|
}
|
|
|
|
export function createUnit(settings: ApiSettings, payload: UnitCreatePayload): Promise<OrganizationUnitItem> {
|
|
return apiPostJson(settings, "/api/v1/organizations/units", payload);
|
|
}
|
|
|
|
export function patchUnit(settings: ApiSettings, id: string, payload: Partial<UnitCreatePayload>): Promise<OrganizationUnitItem> {
|
|
return apiPatchJson(settings, `/api/v1/organizations/units/${encodeURIComponent(id)}`, payload);
|
|
}
|
|
|
|
export function createRelation(settings: ApiSettings, payload: RelationCreatePayload): Promise<OrganizationRelationItem> {
|
|
return apiPostJson(settings, "/api/v1/organizations/relations", payload);
|
|
}
|
|
|
|
export function patchRelation(settings: ApiSettings, id: string, payload: Partial<RelationCreatePayload>): Promise<OrganizationRelationItem> {
|
|
return apiPatchJson(settings, `/api/v1/organizations/relations/${encodeURIComponent(id)}`, payload);
|
|
}
|
|
|
|
export function createFunctionType(settings: ApiSettings, payload: FunctionTypeCreatePayload): Promise<OrganizationFunctionTypeItem> {
|
|
return apiPostJson(settings, "/api/v1/organizations/function-types", payload);
|
|
}
|
|
|
|
export function patchFunctionType(settings: ApiSettings, id: string, payload: Partial<FunctionTypeCreatePayload>): Promise<OrganizationFunctionTypeItem> {
|
|
return apiPatchJson(settings, `/api/v1/organizations/function-types/${encodeURIComponent(id)}`, payload);
|
|
}
|
|
|
|
export function createFunction(settings: ApiSettings, payload: FunctionCreatePayload): Promise<OrganizationFunctionItem> {
|
|
return apiPostJson(settings, "/api/v1/organizations/functions", payload);
|
|
}
|
|
|
|
export function patchFunction(settings: ApiSettings, id: string, payload: Partial<FunctionCreatePayload>): Promise<OrganizationFunctionItem> {
|
|
return apiPatchJson(settings, `/api/v1/organizations/functions/${encodeURIComponent(id)}`, payload);
|
|
}
|