from datetime import datetime from pydantic import BaseModel class ClientUserCreate(BaseModel): client_account_id: int full_name: str email: str role: str = "viewer" status: str = "invited" is_new_user: bool = True class ClientUserUpdate(BaseModel): full_name: str | None = None email: str | None = None role: str | None = None status: str | None = None is_new_user: bool | None = None class ClientFeatureUpdate(BaseModel): enabled: bool class ClientUserModulePermissionUpdate(BaseModel): access_level: str class ClientUserRead(BaseModel): id: int client_account_id: int full_name: str email: str role: str status: str is_new_user: bool last_login_at: datetime | None created_at: datetime module_permissions: list["ClientUserModulePermissionRead"] class ClientFeatureRead(BaseModel): id: int client_account_id: int feature_key: str feature_name: str feature_group: str description: str | None enabled: bool updated_at: datetime created_at: datetime class ClientUserModulePermissionRead(BaseModel): id: int client_account_id: int client_user_id: int module_key: str module_name: str module_group: str description: str | None access_level: str updated_at: datetime created_at: datetime class ClientAccessAuditEventRead(BaseModel): id: int client_account_id: int actor_type: str actor_name: str actor_email: str actor_role: str action: str target_type: str target_id: int | None module_key: str | None summary: str created_at: datetime class ClientAccessRead(BaseModel): id: int tenant_id: str name: str client_code: str status: str powerbi_workspace: str | None notes: str | None created_at: datetime users: list[ClientUserRead] features: list[ClientFeatureRead] active_user_count: int new_user_count: int enabled_feature_count: int total_feature_count: int audit_history: list[ClientAccessAuditEventRead] ClientUserRead.model_rebuild()