Browse Source

fix get_db

dev
poturaevpetr 2 weeks ago
parent
commit
168151fe7f
  1. 102
      apiApp/routers/ai_conclusion_router.py

102
apiApp/routers/ai_conclusion_router.py

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

Loading…
Cancel
Save