""" Database models for the TTS API. """ from datetime import datetime from sqlalchemy import Column, Integer, String, DateTime, Float, Text, JSON, Boolean from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class Audiobook(Base): """Model for storing audiobook information.""" __tablename__ = 'audiobooks' id = Column(String(36), primary_key=True) title = Column(String(255), nullable=False) author = Column(String(255)) voice_id = Column(String(50), nullable=False) status = Column(String(20), nullable=False, default='pending') # pending, processing, completed, failed created_at = Column(DateTime, nullable=False, default=datetime.utcnow) updated_at = Column(DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) duration = Column(Float) # Duration in seconds file_path = Column(String(255)) # Path to the audio file error = Column(Text) # Error message if status is 'failed' metadata = Column(JSON) # Additional metadata class Voice(Base): """Model for storing voice information.""" __tablename__ = 'voices' id = Column(String(36), primary_key=True) name = Column(String(255), nullable=False) type = Column(String(50), nullable=False) # standard, cloned speaker_id = Column(Integer) created_at = Column(DateTime, nullable=False, default=datetime.utcnow) is_active = Column(Boolean, default=True) metadata = Column(JSON) # Store voice-specific settings and data class AudioCache(Base): """Model for caching generated audio.""" __tablename__ = 'audio_cache' id = Column(String(36), primary_key=True) hash = Column(String(64), nullable=False, unique=True) # Hash of input parameters format = Column(String(10), nullable=False) # Audio format (mp3, wav, etc.) created_at = Column(DateTime, nullable=False, default=datetime.utcnow) file_path = Column(String(255), nullable=False) metadata = Column(JSON) # Store generation parameters