77 lines
2.9 KiB
Python
77 lines
2.9 KiB
Python
"""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)
|