voiceforge / backend /app /models /audio_file.py
lordofgaming
Initial VoiceForge deployment (clean)
673435a
"""
Audio File Model
"""
from datetime import datetime
from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey, Enum
from sqlalchemy.orm import relationship
import enum
from .base import Base
class AudioFileStatus(str, enum.Enum):
"""Audio file processing status"""
UPLOADED = "uploaded"
PROCESSING = "processing"
DONE = "done"
FAILED = "failed"
class AudioFile(Base):
"""Audio file database model"""
__tablename__ = "audio_files"
id = Column(Integer, primary_key=True, index=True)
# user_id removed
storage_path = Column(String(500), nullable=False)
original_filename = Column(String(255), nullable=True)
duration = Column(Float, nullable=True) # Duration in seconds
format = Column(String(20), nullable=True) # wav, mp3, etc.
sample_rate = Column(Integer, nullable=True)
channels = Column(Integer, nullable=True)
file_size = Column(Integer, nullable=True) # Size in bytes
language = Column(String(10), nullable=True) # User-specified language
detected_language = Column(String(10), nullable=True) # Auto-detected language
status = Column(String(20), default=AudioFileStatus.UPLOADED.value, index=True)
error_message = Column(String(500), nullable=True)
created_at = Column(DateTime, default=datetime.utcnow, index=True)
processed_at = Column(DateTime, nullable=True)
# Relationships
# user relationship removed
transcripts = relationship("Transcript", back_populates="audio_file")
def __repr__(self):
return f"<AudioFile(id={self.id}, filename={self.original_filename}, status={self.status})>"