huoyan-enterprise/backend/admin/schemas.py

135 lines
3.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""后台管理 API 请求/响应模型"""
from datetime import datetime
from typing import Any, Dict, List, Optional
from pydantic import BaseModel, EmailStr, Field
class EnterpriseResponse(BaseModel):
id: int
name: str
code: Optional[str] = None
ai_display_name: str = Field(..., description="AI 助手对外展示名称(系统提示词等)")
created_at: Optional[datetime] = None
class EnterpriseUpdate(BaseModel):
name: str = Field(..., min_length=1, max_length=255)
ai_display_name: str = Field(
...,
min_length=1,
max_length=128,
description="AI 助手名称,将进入各模式系统提示词",
)
class DepartmentCreate(BaseModel):
name: str = Field(..., min_length=1, max_length=255)
parent_id: Optional[int] = None
class DepartmentUpdate(BaseModel):
name: Optional[str] = Field(None, min_length=1, max_length=255)
parent_id: Optional[int] = None
class DepartmentSetLeader(BaseModel):
leader_user_id: Optional[int] = Field(None, description="负责人 user_id传 null 表示清除")
class DepartmentResponse(BaseModel):
id: int
enterprise_id: int
name: str
parent_id: Optional[int] = None
leader_user_id: Optional[int] = None
leader_name: Optional[str] = None
created_at: Optional[datetime] = None
class AdminUserCreate(BaseModel):
username: str = Field(..., max_length=50)
email: EmailStr
phone: str = Field(..., max_length=255)
password: str = Field(..., min_length=6)
display_name: Optional[str] = Field(None, max_length=100)
department_id: Optional[int] = None
role: str = Field("employee", description="admin | leader | employee")
class AdminUserUpdate(BaseModel):
email: Optional[EmailStr] = None
phone: Optional[str] = Field(None, max_length=255)
display_name: Optional[str] = Field(None, max_length=100)
department_id: Optional[int] = None
role: Optional[str] = Field(None, description="admin | leader | employee")
is_active: Optional[bool] = None
password: Optional[str] = Field(None, min_length=6)
allow_kb_upload: Optional[bool] = None
class UserPermissionUpdate(BaseModel):
"""领导更新下属权限(仅 allow_kb_upload"""
allow_kb_upload: bool
class AdminUserListItem(BaseModel):
id: int
username: str
email: str
phone: str
display_name: Optional[str] = None
enterprise_id: int
department_id: Optional[int] = None
role: str
is_active: bool
is_first_login: bool = True
allow_kb_upload: bool = True
created_at: Optional[datetime] = None
last_login_at: Optional[datetime] = None
class AdminUserListResponse(BaseModel):
total: int
items: list[AdminUserListItem]
# ── 审计日志 ──────────────────────────────────
class AuditLogItem(BaseModel):
id: int
enterprise_id: int
actor_id: int
actor_name: Optional[str] = None
action: str
target_user_id: Optional[int] = None
target_name: Optional[str] = None
department_id: Optional[int] = None
department_name: Optional[str] = None
kb_id: Optional[int] = None
kb_name: Optional[str] = None
file_id: Optional[int] = None
file_name: Optional[str] = None
ip: Optional[str] = None
metadata: Optional[Any] = None
created_at: Optional[datetime] = None
class AuditLogListResponse(BaseModel):
total: int
items: List[AuditLogItem]
# ── 团队成员(领导视角) ──────────────────────
class TeamMemberItem(BaseModel):
id: int
username: str
display_name: Optional[str] = None
department_id: Optional[int] = None
department_name: Optional[str] = None
role: str
is_active: bool
allow_kb_upload: bool
created_at: Optional[datetime] = None