Add organizations module surface
This commit is contained in:
275
src/govoplan_organizations/backend/api/v1/schemas.py
Normal file
275
src/govoplan_organizations/backend/api/v1/schemas.py
Normal file
@@ -0,0 +1,275 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Any, Literal
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
StructureKind = Literal["hierarchy", "network", "membership", "classification"]
|
||||
|
||||
|
||||
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)
|
||||
|
||||
|
||||
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
|
||||
|
||||
|
||||
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)
|
||||
|
||||
|
||||
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
|
||||
|
||||
|
||||
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)
|
||||
|
||||
|
||||
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
|
||||
Reference in New Issue
Block a user