38 lines
1.6 KiB
Python
38 lines
1.6 KiB
Python
from sqlalchemy import Column, String, DateTime, Text, UUID, ForeignKey, Float, Integer
|
|
from sqlalchemy.orm import relationship
|
|
from apiApp.database import Base
|
|
import uuid
|
|
from datetime import datetime
|
|
|
|
|
|
class Audio(Base):
|
|
__tablename__ = "audio"
|
|
|
|
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
|
filename = Column(Text, nullable=False)
|
|
index_date = Column(DateTime, default=datetime.utcnow)
|
|
file_path = Column(Text)
|
|
duration = Column(Float)
|
|
file_size = Column(Integer)
|
|
sourse = Column(Text, default="internal")
|
|
recognition_status = Column(Text, default="pending", index=True) # pending, processing, completed, failed
|
|
recognition_attempts = Column(Integer, default=0)
|
|
recognition_last_error = Column(Text, nullable=True)
|
|
recognition_last_attempt_at = Column(DateTime, nullable=True)
|
|
|
|
ai_conclusion = relationship("AiConclusion", back_populates="audio", cascade="all, delete-orphan")
|
|
|
|
def to_dict(self):
|
|
return {
|
|
"id": str(self.id),
|
|
"filename": self.filename,
|
|
"index_date": self.index_date.isoformat() if self.index_date else None,
|
|
"file_path": self.file_path,
|
|
"duration": self.duration,
|
|
"file_size": self.file_size,
|
|
"sourse": self.sourse,
|
|
"recognition_status": self.recognition_status,
|
|
"recognition_attempts": self.recognition_attempts,
|
|
"recognition_last_error": self.recognition_last_error,
|
|
"recognition_last_attempt_at": self.recognition_last_attempt_at.isoformat() if self.recognition_last_attempt_at else None,
|
|
} |