|
12 | 12 | import logging |
13 | 13 | from typing import Optional |
14 | 14 |
|
15 | | -from fastapi import APIRouter, HTTPException, Query, Depends |
| 15 | +from fastapi import APIRouter, HTTPException, Query, Depends, Body |
16 | 16 |
|
17 | 17 | from api.deps import get_database_manager |
18 | 18 | from api.v1.schemas.history import ( |
19 | 19 | HistoryListResponse, |
20 | 20 | HistoryItem, |
| 21 | + DeleteHistoryRequest, |
| 22 | + DeleteHistoryResponse, |
21 | 23 | NewsIntelItem, |
22 | 24 | NewsIntelResponse, |
23 | 25 | AnalysisReport, |
@@ -116,6 +118,51 @@ def get_history_list( |
116 | 118 | ) |
117 | 119 |
|
118 | 120 |
|
| 121 | +@router.delete( |
| 122 | + "", |
| 123 | + response_model=DeleteHistoryResponse, |
| 124 | + responses={ |
| 125 | + 200: {"description": "删除成功"}, |
| 126 | + 400: {"description": "请求参数错误", "model": ErrorResponse}, |
| 127 | + 500: {"description": "服务器错误", "model": ErrorResponse}, |
| 128 | + }, |
| 129 | + summary="删除历史分析记录", |
| 130 | + description="按历史记录主键 ID 批量删除分析历史" |
| 131 | +) |
| 132 | +def delete_history_records( |
| 133 | + request: DeleteHistoryRequest = Body(...), |
| 134 | + db_manager: DatabaseManager = Depends(get_database_manager) |
| 135 | +) -> DeleteHistoryResponse: |
| 136 | + """ |
| 137 | + 按主键 ID 批量删除历史分析记录。 |
| 138 | + """ |
| 139 | + record_ids = sorted({record_id for record_id in request.record_ids if record_id is not None}) |
| 140 | + if not record_ids: |
| 141 | + raise HTTPException( |
| 142 | + status_code=400, |
| 143 | + detail={ |
| 144 | + "error": "invalid_request", |
| 145 | + "message": "record_ids 不能为空" |
| 146 | + } |
| 147 | + ) |
| 148 | + |
| 149 | + try: |
| 150 | + service = HistoryService(db_manager) |
| 151 | + deleted = service.delete_history_records(record_ids) |
| 152 | + return DeleteHistoryResponse(deleted=deleted) |
| 153 | + except HTTPException: |
| 154 | + raise |
| 155 | + except Exception as e: |
| 156 | + logger.error(f"删除历史记录失败: {e}", exc_info=True) |
| 157 | + raise HTTPException( |
| 158 | + status_code=500, |
| 159 | + detail={ |
| 160 | + "error": "internal_error", |
| 161 | + "message": f"删除历史记录失败: {str(e)}" |
| 162 | + } |
| 163 | + ) |
| 164 | + |
| 165 | + |
119 | 166 | @router.get( |
120 | 167 | "/{record_id}", |
121 | 168 | response_model=AnalysisReport, |
|
0 commit comments