from pydantic import BaseModel from typing import Literal class SystemCreateRequest(BaseModel): system_key: str name: str status: str = "active" class SystemUpdateRequest(BaseModel): name: str | None = None status: str | None = None class SystemItem(BaseModel): id: str system_key: str name: str status: str class ModuleCreateRequest(BaseModel): system_key: str module_key: str name: str status: str = "active" class ModuleUpdateRequest(BaseModel): name: str | None = None status: str | None = None class ModuleItem(BaseModel): id: str system_key: str | None = None module_key: str name: str status: str class CompanyCreateRequest(BaseModel): company_key: str name: str status: str = "active" class CompanyUpdateRequest(BaseModel): name: str | None = None status: str | None = None class CompanyItem(BaseModel): id: str company_key: str name: str status: str class SiteCreateRequest(BaseModel): site_key: str company_key: str name: str status: str = "active" class SiteUpdateRequest(BaseModel): company_key: str | None = None name: str | None = None status: str | None = None class SiteItem(BaseModel): id: str site_key: str company_key: str name: str status: str class MemberItem(BaseModel): id: str authentik_sub: str email: str | None = None display_name: str | None = None is_active: bool class MemberUpsertRequest(BaseModel): authentik_sub: str | None = None email: str | None = None display_name: str | None = None is_active: bool = True sync_to_authentik: bool = True class MemberUpdateRequest(BaseModel): email: str | None = None display_name: str | None = None is_active: bool | None = None sync_to_authentik: bool = True class MemberPermissionGroupsUpdateRequest(BaseModel): group_keys: list[str] class ListResponse(BaseModel): items: list total: int limit: int offset: int class PermissionGroupCreateRequest(BaseModel): group_key: str name: str status: str = "active" class PermissionGroupUpdateRequest(BaseModel): name: str | None = None status: str | None = None class PermissionGroupItem(BaseModel): id: str group_key: str name: str status: str class PermissionGroupPermissionItem(BaseModel): id: str system: str module: str action: Literal["view", "edit"] scope_type: Literal["site"] scope_id: str class MemberPermissionGroupsResponse(BaseModel): authentik_sub: str group_keys: list[str] class GroupBindingUpdateRequest(BaseModel): site_keys: list[str] system_keys: list[str] module_keys: list[str] member_subs: list[str] actions: list[Literal["view", "edit"]] class GroupBindingSnapshot(BaseModel): group_key: str site_keys: list[str] system_keys: list[str] module_keys: list[str] member_subs: list[str] actions: list[Literal["view", "edit"]] class GroupRelationItem(BaseModel): group_key: str group_name: str status: str class MemberRelationItem(BaseModel): authentik_sub: str email: str | None = None display_name: str | None = None is_active: bool