diff --git a/apiApp/routers/ai_conclusion_router.py b/apiApp/routers/ai_conclusion_router.py index 4a8c989..8594d3a 100644 --- a/apiApp/routers/ai_conclusion_router.py +++ b/apiApp/routers/ai_conclusion_router.py @@ -1,15 +1,15 @@ """ API endpoints для получения AI заключений от GigaAM API """ -from fastapi import APIRouter, HTTPException +from fastapi import APIRouter, HTTPException, Depends from pydantic import BaseModel from typing import Optional, List, Dict, Any -from apiApp.database import get_db_session +from sqlalchemy.orm import Session +from apiApp.database import get_db from apiApp.database.Audio import Audio from apiApp.database.AiConclusion import AiConclusion from datetime import datetime import logging -import uuid logger = logging.getLogger(__name__) ai_conclusion_router = APIRouter() @@ -35,7 +35,7 @@ class AiConclusionResponse(BaseModel): @ai_conclusion_router.post("/conclusion/save", response_model=AiConclusionResponse) -async def save_ai_conclusion(request: AiConclusionRequest): +async def save_ai_conclusion(request: AiConclusionRequest, db: Session = Depends(get_db)): """ Сохраняет AI заключение от GigaAM API @@ -50,59 +50,59 @@ async def save_ai_conclusion(request: AiConclusionRequest): try: logger.info(f"📥 Получено AI заключение для файла: {request.filename}") - with get_db_session() as db: - # Находим аудио файл по имени - audio = db.query(Audio).filter(Audio.filename == request.filename).first() - - if not audio: - logger.warning(f"⚠️ Файл {request.filename} не найден в БД") - raise HTTPException( - status_code=404, - detail=f'Файл {request.filename} не найден' - ) - - # Проверяем, есть ли уже заключение - existing_conclusion = db.query(AiConclusion).filter( - AiConclusion.audio_id == audio.id - ).first() - - conclusion_data = { - "transcription": request.transcription, - "ai_transcription": request.corrected_transcription, - "conclusion": request.analysis, - "segments": request.segments, - "processing_time_seconds": request.processing_time_seconds - } - - if existing_conclusion: - # Обновляем существующее заключение - logger.info(f"🔄 Обновление существующего заключения для {request.filename}") - existing_conclusion.conclusion = conclusion_data - existing_conclusion.end_date = datetime.utcnow() - else: - # Создаём новое заключение - logger.info(f"✅ Создание нового заключения для {request.filename}") - new_conclusion = AiConclusion( - audio_id=audio.id, - conclusion=conclusion_data, - index_date=datetime.utcnow() - ) - db.add(new_conclusion) - - db.commit() - logger.info(f"✅ Заключение сохранено для {request.filename}") - - return AiConclusionResponse( - success=True, - message='Заключение сохранено', - audio_id=str(audio.id), - filename=request.filename + # Находим аудио файл по имени + audio = db.query(Audio).filter(Audio.filename == request.filename).first() + + if not audio: + logger.warning(f"⚠️ Файл {request.filename} не найден в БД") + raise HTTPException( + status_code=404, + detail=f'Файл {request.filename} не найден' + ) + + # Проверяем, есть ли уже заключение + existing_conclusion = db.query(AiConclusion).filter( + AiConclusion.audio_id == audio.id + ).first() + + conclusion_data = { + "transcription": request.transcription, + "ai_transcription": request.corrected_transcription, + "conclusion": request.analysis, + "segments": request.segments, + "processing_time_seconds": request.processing_time_seconds + } + + if existing_conclusion: + # Обновляем существующее заключение + logger.info(f"🔄 Обновление существующего заключения для {request.filename}") + existing_conclusion.conclusion = conclusion_data + existing_conclusion.end_date = datetime.utcnow() + else: + # Создаём новое заключение + logger.info(f"✅ Создание нового заключения для {request.filename}") + new_conclusion = AiConclusion( + audio_id=audio.id, + conclusion=conclusion_data, + index_date=datetime.utcnow() ) + db.add(new_conclusion) + + db.commit() + logger.info(f"✅ Заключение сохранено для {request.filename}") + + return AiConclusionResponse( + success=True, + message='Заключение сохранено', + audio_id=str(audio.id), + filename=request.filename + ) except HTTPException: raise except Exception as e: logger.error(f"❌ Ошибка при сохранении заключения: {e}") + db.rollback() raise HTTPException( status_code=500, detail=str(e)