Сервис для хранения файлов аудио, индексации файлов, записи и выдачи результатов распознавания
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

79 lines
2.7 KiB

from sqlalchemy.orm import Session
from typing import List, Optional
import os
from apiApp.database import Audio
from apiApp.schemas import AudioCreate
from apiApp.config import UPLOAD_FOLDER
import datetime
import uuid
class AudioCRUD:
@staticmethod
def get_all(db: Session) -> List[Audio]:
"""Получить все аудиофайлы"""
return db.query(Audio).all()
@staticmethod
def get_by_id(db: Session, audio_id: uuid.UUID) -> Optional[Audio]:
"""Получить аудиофайл по ID"""
return db.query(Audio).filter(Audio.id == audio_id).first()
@staticmethod
def get_by_filename(db: Session, filename: str) -> Optional[Audio]:
"""Получить аудиофайл по имени файла"""
return db.query(Audio).filter(Audio.filename == filename).first()
@staticmethod
def create(db: Session, audio_data: AudioCreate, file_path: str, file_size: int = None) -> Audio:
"""Создать новую запись аудиофайла"""
db_audio = Audio(
filename=audio_data.filename,
file_path=file_path,
index_date=datetime.datetime.utcnow(),
file_size=file_size
)
db.add(db_audio)
db.commit()
db.refresh(db_audio)
return db_audio
@staticmethod
def update(db: Session, audio_id: uuid.UUID, audio_data: dict) -> Optional[Audio]:
"""Обновить запись аудиофайла"""
db_audio = db.query(Audio).filter(Audio.id == audio_id).first()
if not db_audio:
return None
for key, value in audio_data.items():
if hasattr(db_audio, key):
setattr(db_audio, key, value)
db.commit()
db.refresh(db_audio)
return db_audio
@staticmethod
def delete(db: Session, audio_id: uuid.UUID) -> Optional[Audio]:
"""Удалить аудиофайл"""
db_audio = db.query(Audio).filter(Audio.id == audio_id).first()
if not db_audio:
return None
# Удаление файла с диска
if db_audio.file_path and os.path.exists(db_audio.file_path):
try:
os.remove(db_audio.file_path)
except Exception as e:
print(f"Error deleting file: {e}")
db.delete(db_audio)
db.commit()
return db_audio
@staticmethod
def update_recognition_result(db: Session, audio_id: uuid.UUID, result: dict) -> Optional[Audio]:
"""Обновить результат распознавания"""
return AudioCRUD.update(db, audio_id, {"recognition_result": result})