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
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}) |
|
|
|
|