fc / apps /evidence /api /evidence_api.py
jun2024's picture
Upload 2241 files
b4f2238 verified
Raw History Blame Contribute Delete
3.08 kB
"""
证据清单 API
提供证据清单的排序等 API 端点.
Requirements: 4.2, 4.3, 12.1
"""
from __future__ import annotations
from typing import Any
from django.http import HttpRequest
from ninja import Router, Schema
from apps.core.security.auth import JWTOrSessionAuth
router = Router(tags=["证据清单"], auth=JWTOrSessionAuth())
def _get_evidence_service() -> Any:
"""工厂函数获取证据服务"""
from apps.evidence.services.wiring import get_evidence_service
return get_evidence_service()
class ReorderItemsRequest(Schema):
"""重新排序请求"""
item_ids: list[int]
class ReorderItemsResponse(Schema):
"""重新排序响应"""
success: bool
message: str = ""
@router.post(
"/evidence-lists/{list_id}/reorder",
response=ReorderItemsResponse,
summary="重新排序证据明细",
)
def reorder_evidence_items(request: HttpRequest, list_id: int, data: ReorderItemsRequest) -> Any:
"""
重新排序证据明细
Args:
list_id: 证据清单 ID
data: 包含新顺序的明细 ID 列表
Returns:
操作结果
Requirements: 4.2, 4.3
"""
service = _get_evidence_service()
service.reorder_items(list_id, data.item_ids)
return ReorderItemsResponse(success=True, message="排序成功")
# --- AI 辅助 ---
class AIPurposeRequest(Schema):
"""AI 证明目的建议请求"""
cause_of_action: str = ""
evidence_type: str = ""
evidence_name: str = ""
content_summary: str = ""
class AIPurposeResponse(Schema):
"""AI 证明目的建议响应"""
suggestions: list[str]
class AICrossExamRequest(Schema):
"""AI 质证意见请求"""
cause_of_action: str = ""
our_claim: str = ""
evidence_name: str = ""
content_summary: str = ""
class AICrossExamResponse(Schema):
"""AI 质证意见响应"""
cross_examination: dict[str, Any]
def _get_ai_service() -> Any:
from apps.evidence.services.evidence_ai_service import EvidenceAIService
return EvidenceAIService()
@router.post(
"/ai/suggest-purpose",
response=AIPurposeResponse,
summary="AI 证明目的建议",
)
def ai_suggest_purpose(request: HttpRequest, data: AIPurposeRequest) -> Any:
svc = _get_ai_service()
suggestions = svc.suggest_purpose(
cause_of_action=data.cause_of_action,
evidence_type=data.evidence_type,
evidence_name=data.evidence_name,
content_summary=data.content_summary,
)
return AIPurposeResponse(suggestions=suggestions)
@router.post(
"/ai/generate-cross-examination",
response=AICrossExamResponse,
summary="AI 质证意见生成",
)
def ai_generate_cross_examination(request: HttpRequest, data: AICrossExamRequest) -> Any:
svc = _get_ai_service()
result = svc.generate_cross_examination(
cause_of_action=data.cause_of_action,
our_claim=data.our_claim,
evidence_name=data.evidence_name,
content_summary=data.content_summary,
)
return AICrossExamResponse(cross_examination=result)