"""NL2SQL 管理接口请求模型。""" from __future__ import annotations from typing import Literal from pydantic import BaseModel, Field class RoleCreateReq(BaseModel): role_code: str = Field(min_length=1, max_length=64) role_name: str = Field(min_length=1, max_length=128) employee_role: str = Field(min_length=1, max_length=32) can_query: bool = False max_rows: int = Field(default=1000, gt=0, le=100000) daily_quota: int = Field(default=0, ge=0, le=1000000) class RoleUpdateReq(BaseModel): role_name: str | None = Field(default=None, min_length=1, max_length=128) can_query: bool | None = None max_rows: int | None = Field(default=None, gt=0, le=100000) daily_quota: int | None = Field(default=None, ge=0, le=1000000) status: Literal["active", "inactive"] | None = None class TablePermissionCreateReq(BaseModel): table_name: str = Field(min_length=1, max_length=128) row_scope_type: Literal["none", "customer_ids", "product_ids"] = "none" row_scope_column: str | None = Field(default=None, max_length=128) class TablePermissionUpdateReq(BaseModel): row_scope_type: Literal["none", "customer_ids", "product_ids"] | None = None row_scope_column: str | None = Field(default=None, max_length=128) status: Literal["active", "inactive"] | None = None class ColumnPermissionCreateReq(BaseModel): table_name: str = Field(min_length=1, max_length=128) column_name: str = Field(min_length=1, max_length=128) access_mode: Literal["allow", "deny", "mask"] = "allow" mask_type: Literal["partial", "hash"] | None = None class ColumnPermissionUpdateReq(BaseModel): access_mode: Literal["allow", "deny", "mask"] | None = None mask_type: Literal["partial", "hash"] | None = None status: Literal["active", "inactive"] | None = None class SensitiveFieldCreateReq(BaseModel): table_name: str = Field(min_length=1, max_length=128) column_name: str = Field(min_length=1, max_length=128) mask_type: Literal["partial", "hash"] = "partial" description: str | None = Field(default=None, max_length=255) class SensitiveFieldUpdateReq(BaseModel): mask_type: Literal["partial", "hash"] | None = None description: str | None = Field(default=None, max_length=255) status: Literal["active", "inactive"] | None = None class MaintenanceJobReq(BaseModel): task: Literal["metadata_sync", "vector_cleanup", "consistency_check", "history_cleanup"] before_days: int = Field(default=180, ge=1, le=3650) class RuntimeConfigUpdateReq(BaseModel): """管理员动态调整 NL2SQL 非敏感运行参数。""" cache_ttl: int | None = Field(default=None, ge=30, le=86400) retrieval_top_k: int | None = Field(default=None, ge=1, le=50) retrieval_threshold: float | None = Field(default=None, ge=0.0, le=1.0) max_rows: int | None = Field(default=None, ge=1, le=100000) max_join_depth: int | None = Field(default=None, ge=0, le=10)