303 lines
8.2 KiB
Python
303 lines
8.2 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
from typing import Any, Literal
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
StructureKind = Literal["hierarchy", "network", "membership", "classification"]
|
|
AuditDetailLevel = Literal["summary", "standard", "full"]
|
|
|
|
|
|
class OrganizationSettingsItem(BaseModel):
|
|
id: str | None = None
|
|
tenant_id: str
|
|
allow_tenant_model_customization: bool
|
|
require_model_change_requests: bool
|
|
audit_detail_level: AuditDetailLevel
|
|
change_retention_days: int | None = None
|
|
settings: dict[str, Any]
|
|
created_at: datetime | None = None
|
|
updated_at: datetime | None = None
|
|
|
|
|
|
class OrganizationSettingsUpdateRequest(BaseModel):
|
|
allow_tenant_model_customization: bool | None = None
|
|
require_model_change_requests: bool | None = None
|
|
audit_detail_level: AuditDetailLevel | None = None
|
|
change_retention_days: int | None = Field(default=None, ge=0)
|
|
settings: dict[str, Any] | None = None
|
|
|
|
|
|
class OrganizationUnitTypeItem(BaseModel):
|
|
id: str
|
|
tenant_id: str
|
|
slug: str
|
|
name: str
|
|
description: str | None = None
|
|
is_active: bool
|
|
settings: dict[str, Any]
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class OrganizationStructureItem(BaseModel):
|
|
id: str
|
|
tenant_id: str
|
|
slug: str
|
|
name: str
|
|
description: str | None = None
|
|
structure_kind: str
|
|
is_active: bool
|
|
settings: dict[str, Any]
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class OrganizationRelationTypeItem(BaseModel):
|
|
id: str
|
|
tenant_id: str
|
|
structure_id: str | None = None
|
|
slug: str
|
|
name: str
|
|
description: str | None = None
|
|
source_unit_type_id: str | None = None
|
|
target_unit_type_id: str | None = None
|
|
is_hierarchical: bool
|
|
allow_cycles: bool
|
|
is_active: bool
|
|
settings: dict[str, Any]
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class OrganizationUnitItem(BaseModel):
|
|
id: str
|
|
tenant_id: str
|
|
unit_type_id: str | None = None
|
|
parent_id: str | None = None
|
|
slug: str
|
|
name: str
|
|
description: str | None = None
|
|
is_active: bool
|
|
settings: dict[str, Any]
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class OrganizationRelationItem(BaseModel):
|
|
id: str
|
|
tenant_id: str
|
|
structure_id: str
|
|
relation_type_id: str
|
|
source_unit_id: str
|
|
target_unit_id: str
|
|
valid_from: datetime | None = None
|
|
valid_until: datetime | None = None
|
|
is_active: bool
|
|
settings: dict[str, Any]
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class OrganizationFunctionTypeItem(BaseModel):
|
|
id: str
|
|
tenant_id: str
|
|
slug: str
|
|
name: str
|
|
description: str | None = None
|
|
organization_unit_type_id: str | None = None
|
|
delegable: bool
|
|
act_in_place_allowed: bool
|
|
is_active: bool
|
|
settings: dict[str, Any]
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class OrganizationFunctionItem(BaseModel):
|
|
id: str
|
|
tenant_id: str
|
|
function_type_id: str | None = None
|
|
organization_unit_id: str
|
|
slug: str
|
|
name: str
|
|
description: str | None = None
|
|
delegable: bool
|
|
act_in_place_allowed: bool
|
|
is_active: bool
|
|
settings: dict[str, Any]
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class OrganizationFunctionAssignmentItem(BaseModel):
|
|
id: str
|
|
tenant_id: str
|
|
identity_id: str
|
|
account_id: str | None = None
|
|
function_id: str
|
|
organization_unit_id: str
|
|
applies_to_subunits: bool
|
|
source: str
|
|
delegated_from_assignment_id: str | None = None
|
|
acting_for_account_id: str | None = None
|
|
valid_from: datetime | None = None
|
|
valid_until: datetime | None = None
|
|
is_active: bool
|
|
settings: dict[str, Any]
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class OrganizationModelResponse(BaseModel):
|
|
unit_types: list[OrganizationUnitTypeItem]
|
|
structures: list[OrganizationStructureItem]
|
|
relation_types: list[OrganizationRelationTypeItem]
|
|
units: list[OrganizationUnitItem]
|
|
relations: list[OrganizationRelationItem]
|
|
function_types: list[OrganizationFunctionTypeItem]
|
|
functions: list[OrganizationFunctionItem]
|
|
function_assignments: list[OrganizationFunctionAssignmentItem]
|
|
|
|
|
|
class SluggedCreateRequest(BaseModel):
|
|
slug: str | None = Field(default=None, max_length=100)
|
|
name: str = Field(min_length=1, max_length=255)
|
|
description: str | None = None
|
|
is_active: bool = True
|
|
settings: dict[str, Any] = Field(default_factory=dict)
|
|
change_request_id: str | None = None
|
|
|
|
|
|
class SluggedUpdateRequest(BaseModel):
|
|
slug: str | None = Field(default=None, max_length=100)
|
|
name: str | None = Field(default=None, max_length=255)
|
|
description: str | None = None
|
|
is_active: bool | None = None
|
|
settings: dict[str, Any] | None = None
|
|
change_request_id: str | None = None
|
|
|
|
|
|
class UnitTypeCreateRequest(SluggedCreateRequest):
|
|
pass
|
|
|
|
|
|
class UnitTypeUpdateRequest(SluggedUpdateRequest):
|
|
pass
|
|
|
|
|
|
class StructureCreateRequest(SluggedCreateRequest):
|
|
structure_kind: StructureKind = "hierarchy"
|
|
|
|
|
|
class StructureUpdateRequest(SluggedUpdateRequest):
|
|
structure_kind: StructureKind | None = None
|
|
|
|
|
|
class RelationTypeCreateRequest(SluggedCreateRequest):
|
|
structure_id: str | None = None
|
|
source_unit_type_id: str | None = None
|
|
target_unit_type_id: str | None = None
|
|
is_hierarchical: bool = True
|
|
allow_cycles: bool = False
|
|
|
|
|
|
class RelationTypeUpdateRequest(SluggedUpdateRequest):
|
|
structure_id: str | None = None
|
|
source_unit_type_id: str | None = None
|
|
target_unit_type_id: str | None = None
|
|
is_hierarchical: bool | None = None
|
|
allow_cycles: bool | None = None
|
|
|
|
|
|
class UnitCreateRequest(SluggedCreateRequest):
|
|
unit_type_id: str | None = None
|
|
parent_id: str | None = None
|
|
|
|
|
|
class UnitUpdateRequest(SluggedUpdateRequest):
|
|
unit_type_id: str | None = None
|
|
parent_id: str | None = None
|
|
|
|
|
|
class RelationCreateRequest(BaseModel):
|
|
structure_id: str
|
|
relation_type_id: str
|
|
source_unit_id: str
|
|
target_unit_id: str
|
|
valid_from: datetime | None = None
|
|
valid_until: datetime | None = None
|
|
is_active: bool = True
|
|
settings: dict[str, Any] = Field(default_factory=dict)
|
|
change_request_id: str | None = None
|
|
|
|
|
|
class RelationUpdateRequest(BaseModel):
|
|
structure_id: str | None = None
|
|
relation_type_id: str | None = None
|
|
source_unit_id: str | None = None
|
|
target_unit_id: str | None = None
|
|
valid_from: datetime | None = None
|
|
valid_until: datetime | None = None
|
|
is_active: bool | None = None
|
|
settings: dict[str, Any] | None = None
|
|
change_request_id: str | None = None
|
|
|
|
|
|
class FunctionTypeCreateRequest(SluggedCreateRequest):
|
|
organization_unit_type_id: str | None = None
|
|
delegable: bool = False
|
|
act_in_place_allowed: bool = False
|
|
|
|
|
|
class FunctionTypeUpdateRequest(SluggedUpdateRequest):
|
|
organization_unit_type_id: str | None = None
|
|
delegable: bool | None = None
|
|
act_in_place_allowed: bool | None = None
|
|
|
|
|
|
class FunctionCreateRequest(SluggedCreateRequest):
|
|
organization_unit_id: str
|
|
function_type_id: str | None = None
|
|
delegable: bool | None = None
|
|
act_in_place_allowed: bool | None = None
|
|
|
|
|
|
class FunctionUpdateRequest(SluggedUpdateRequest):
|
|
organization_unit_id: str | None = None
|
|
function_type_id: str | None = None
|
|
delegable: bool | None = None
|
|
act_in_place_allowed: bool | None = None
|
|
|
|
|
|
class FunctionAssignmentCreateRequest(BaseModel):
|
|
identity_id: str
|
|
function_id: str
|
|
account_id: str | None = None
|
|
applies_to_subunits: bool = False
|
|
source: str = "direct"
|
|
delegated_from_assignment_id: str | None = None
|
|
acting_for_account_id: str | None = None
|
|
valid_from: datetime | None = None
|
|
valid_until: datetime | None = None
|
|
is_active: bool = True
|
|
settings: dict[str, Any] = Field(default_factory=dict)
|
|
change_request_id: str | None = None
|
|
|
|
|
|
class FunctionAssignmentUpdateRequest(BaseModel):
|
|
identity_id: str | None = None
|
|
function_id: str | None = None
|
|
account_id: str | None = None
|
|
applies_to_subunits: bool | None = None
|
|
source: str | None = None
|
|
delegated_from_assignment_id: str | None = None
|
|
acting_for_account_id: str | None = None
|
|
valid_from: datetime | None = None
|
|
valid_until: datetime | None = None
|
|
is_active: bool | None = None
|
|
settings: dict[str, Any] | None = None
|
|
change_request_id: str | None = None
|