Add organizations module surface
This commit is contained in:
@@ -0,0 +1,270 @@
|
||||
import { apiFetch, 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 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 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 OrganizationModel = {
|
||||
unit_types: OrganizationUnitTypeItem[];
|
||||
structures: OrganizationStructureItem[];
|
||||
relation_types: OrganizationRelationTypeItem[];
|
||||
units: OrganizationUnitItem[];
|
||||
relations: OrganizationRelationItem[];
|
||||
function_types: OrganizationFunctionTypeItem[];
|
||||
functions: OrganizationFunctionItem[];
|
||||
function_assignments: OrganizationFunctionAssignmentItem[];
|
||||
};
|
||||
|
||||
export type SluggedCreatePayload = {
|
||||
slug?: string | null;
|
||||
name: string;
|
||||
description?: string | null;
|
||||
is_active?: boolean;
|
||||
settings?: Record<string, unknown>;
|
||||
};
|
||||
|
||||
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>;
|
||||
};
|
||||
|
||||
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 type FunctionAssignmentCreatePayload = {
|
||||
identity_id: string;
|
||||
account_id?: string | null;
|
||||
function_id: string;
|
||||
applies_to_subunits: boolean;
|
||||
source: string;
|
||||
delegated_from_assignment_id?: string | null;
|
||||
acting_for_account_id?: string | null;
|
||||
is_active?: boolean;
|
||||
settings?: Record<string, unknown>;
|
||||
};
|
||||
|
||||
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 createUnitType(settings: ApiSettings, payload: SluggedCreatePayload): Promise<OrganizationUnitTypeItem> {
|
||||
return post(settings, "/api/v1/organizations/unit-types", payload);
|
||||
}
|
||||
|
||||
export function patchUnitType(settings: ApiSettings, id: string, payload: Partial<SluggedCreatePayload>): Promise<OrganizationUnitTypeItem> {
|
||||
return patch(settings, `/api/v1/organizations/unit-types/${encodeURIComponent(id)}`, payload);
|
||||
}
|
||||
|
||||
export function createStructure(settings: ApiSettings, payload: StructureCreatePayload): Promise<OrganizationStructureItem> {
|
||||
return post(settings, "/api/v1/organizations/structures", payload);
|
||||
}
|
||||
|
||||
export function patchStructure(settings: ApiSettings, id: string, payload: Partial<StructureCreatePayload>): Promise<OrganizationStructureItem> {
|
||||
return patch(settings, `/api/v1/organizations/structures/${encodeURIComponent(id)}`, payload);
|
||||
}
|
||||
|
||||
export function createRelationType(settings: ApiSettings, payload: RelationTypeCreatePayload): Promise<OrganizationRelationTypeItem> {
|
||||
return post(settings, "/api/v1/organizations/relation-types", payload);
|
||||
}
|
||||
|
||||
export function patchRelationType(settings: ApiSettings, id: string, payload: Partial<RelationTypeCreatePayload>): Promise<OrganizationRelationTypeItem> {
|
||||
return patch(settings, `/api/v1/organizations/relation-types/${encodeURIComponent(id)}`, payload);
|
||||
}
|
||||
|
||||
export function createUnit(settings: ApiSettings, payload: UnitCreatePayload): Promise<OrganizationUnitItem> {
|
||||
return post(settings, "/api/v1/organizations/units", payload);
|
||||
}
|
||||
|
||||
export function patchUnit(settings: ApiSettings, id: string, payload: Partial<UnitCreatePayload>): Promise<OrganizationUnitItem> {
|
||||
return patch(settings, `/api/v1/organizations/units/${encodeURIComponent(id)}`, payload);
|
||||
}
|
||||
|
||||
export function createRelation(settings: ApiSettings, payload: RelationCreatePayload): Promise<OrganizationRelationItem> {
|
||||
return post(settings, "/api/v1/organizations/relations", payload);
|
||||
}
|
||||
|
||||
export function patchRelation(settings: ApiSettings, id: string, payload: Partial<RelationCreatePayload>): Promise<OrganizationRelationItem> {
|
||||
return patch(settings, `/api/v1/organizations/relations/${encodeURIComponent(id)}`, payload);
|
||||
}
|
||||
|
||||
export function createFunctionType(settings: ApiSettings, payload: FunctionTypeCreatePayload): Promise<OrganizationFunctionTypeItem> {
|
||||
return post(settings, "/api/v1/organizations/function-types", payload);
|
||||
}
|
||||
|
||||
export function patchFunctionType(settings: ApiSettings, id: string, payload: Partial<FunctionTypeCreatePayload>): Promise<OrganizationFunctionTypeItem> {
|
||||
return patch(settings, `/api/v1/organizations/function-types/${encodeURIComponent(id)}`, payload);
|
||||
}
|
||||
|
||||
export function createFunction(settings: ApiSettings, payload: FunctionCreatePayload): Promise<OrganizationFunctionItem> {
|
||||
return post(settings, "/api/v1/organizations/functions", payload);
|
||||
}
|
||||
|
||||
export function patchFunction(settings: ApiSettings, id: string, payload: Partial<FunctionCreatePayload>): Promise<OrganizationFunctionItem> {
|
||||
return patch(settings, `/api/v1/organizations/functions/${encodeURIComponent(id)}`, payload);
|
||||
}
|
||||
|
||||
export function createFunctionAssignment(settings: ApiSettings, payload: FunctionAssignmentCreatePayload): Promise<OrganizationFunctionAssignmentItem> {
|
||||
return post(settings, "/api/v1/organizations/function-assignments", payload);
|
||||
}
|
||||
|
||||
export function patchFunctionAssignment(settings: ApiSettings, id: string, payload: Partial<FunctionAssignmentCreatePayload>): Promise<OrganizationFunctionAssignmentItem> {
|
||||
return patch(settings, `/api/v1/organizations/function-assignments/${encodeURIComponent(id)}`, payload);
|
||||
}
|
||||
Reference in New Issue
Block a user