Files
2026-04-22 17:07:33 +08:00

103 lines
2.4 KiB
Python

from typing import Optional, List
from pydantic import BaseModel, Field
from datetime import datetime
class CategoryBase(BaseModel):
parent_id: Optional[int] = None
level: int = 1
code: str = Field(..., max_length=50)
name: str = Field(..., max_length=100)
description: Optional[str] = None
sort_order: int = 0
class CategoryCreate(CategoryBase):
pass
class CategoryUpdate(BaseModel):
parent_id: Optional[int] = None
code: Optional[str] = Field(None, max_length=50)
name: Optional[str] = Field(None, max_length=100)
description: Optional[str] = None
sort_order: Optional[int] = None
class CategoryOut(CategoryBase):
id: int
created_at: datetime
class Config:
from_attributes = True
class CategoryTree(CategoryOut):
children: List["CategoryTree"] = []
class DataLevelOut(BaseModel):
id: int
code: str
name: str
description: Optional[str] = None
color: str
control_requirements: Optional[dict] = None
sort_order: int
class Config:
from_attributes = True
class RecognitionRuleBase(BaseModel):
template_id: int
category_id: Optional[int] = None
level_id: Optional[int] = None
rule_type: str = Field(..., max_length=20) # regex, keyword, enum
rule_name: Optional[str] = Field(None, max_length=100)
rule_content: str
target_field: str = Field(default="column_name", max_length=20)
priority: int = 100
is_active: bool = True
class RecognitionRuleCreate(RecognitionRuleBase):
pass
class RecognitionRuleUpdate(BaseModel):
category_id: Optional[int] = None
level_id: Optional[int] = None
rule_type: Optional[str] = Field(None, max_length=20)
rule_name: Optional[str] = Field(None, max_length=100)
rule_content: Optional[str] = None
target_field: Optional[str] = Field(None, max_length=20)
priority: Optional[int] = None
is_active: Optional[bool] = None
class RecognitionRuleOut(RecognitionRuleBase):
id: int
hit_count: int
created_at: datetime
category_name: Optional[str] = None
level_name: Optional[str] = None
level_color: Optional[str] = None
class Config:
from_attributes = True
class TemplateOut(BaseModel):
id: int
name: str
industry_type: str
version: str
description: Optional[str] = None
is_builtin: bool
is_active: bool
created_at: datetime
class Config:
from_attributes = True