File size: 3,209 Bytes
b4f2238 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | """
文件夹模板 API
提供文件夹模板的 CRUD 接口.
"""
from __future__ import annotations
import logging
from typing import Any
from ninja import Router
from apps.core.api.schema_utils import schema_to_update_dict
from apps.core.security.auth import JWTOrSessionAuth
from apps.documents.schemas import FolderTemplateIn, FolderTemplateOut, FolderTemplateUpdate
logger = logging.getLogger("apps.documents.api")
router = Router(auth=JWTOrSessionAuth())
def _get_folder_template_service() -> Any:
"""工厂函数:创建 FolderTemplateService 实例"""
from apps.core.dependencies.documents_query import build_folder_template_service
return build_folder_template_service()
@router.get("/folder-templates", response=list[FolderTemplateOut])
def list_folder_templates(
request: Any, template_type: str | None = None, case_type: str | None = None, is_active: bool | None = None
) -> Any:
"""
获取文件夹模板列表
Args:
template_type: 模板类型过滤 (contract/case)
case_type: 案件类型过滤
is_active: 启用状态过滤
"""
service = _get_folder_template_service()
return service.list_templates( # type: ignore[return-value]
case_type=case_type,
is_active=is_active,
)
@router.get("/folder-templates/{template_id}", response=FolderTemplateOut)
def get_folder_template(request: Any, template_id: int) -> Any:
"""获取文件夹模板详情"""
service = _get_folder_template_service()
return service.get_template_by_id(template_id)
@router.post("/folder-templates", response=FolderTemplateOut)
def create_folder_template(request: Any, payload: FolderTemplateIn) -> Any:
"""创建文件夹模板"""
service = _get_folder_template_service()
template = service.create_template_from_dict(payload.dict())
logger.info("创建文件夹模板: %s (ID: %s)", template.name, template.id)
return template
@router.put("/folder-templates/{template_id}", response=FolderTemplateOut)
def update_folder_template(request: Any, template_id: int, payload: FolderTemplateUpdate) -> Any:
"""更新文件夹模板"""
service = _get_folder_template_service()
template = service.update_template_from_dict(template_id, schema_to_update_dict(payload))
logger.info("更新文件夹模板: %s (ID: %s)", template.name, template.id)
return template
@router.delete("/folder-templates/{template_id}", response=dict[str, Any])
def delete_folder_template(request: Any, template_id: int) -> Any:
"""删除文件夹模板(软删除)"""
service = _get_folder_template_service()
service.delete_template(template_id)
return {"success": True, "message": "文件夹模板已删除"}
@router.post("/folder-templates/{template_id}/validate", response=dict[str, Any])
def validate_folder_structure(request: Any, template_id: int) -> Any:
"""验证文件夹模板结构"""
service = _get_folder_template_service()
template = service.get_template_by_id(template_id)
is_valid, error_msg = service.validate_structure(template.structure)
return {
"is_valid": is_valid,
"error_message": error_msg if not is_valid else None,
}
|