fix get_db
This commit is contained in:
@@ -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(
|
|
||||||
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
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Проверяем, есть ли уже заключение
|
||||||
|
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:
|
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)
|
||||||
|
|||||||
Reference in New Issue
Block a user