import enum import uuid from sqlalchemy import BigInteger, Enum, ForeignKey, Interval, String from sqlalchemy.orm import Mapped, mapped_column, relationship from app.models.base import Base, TimestampMixin, UUIDMixin class RecordingSource(str, enum.Enum): web = "web" telegram = "telegram" lensa = "lensa" class RecordingStatus(str, enum.Enum): uploaded = "uploaded" processing = "processing" done = "done" error = "error" class Recording(UUIDMixin, TimestampMixin, Base): __tablename__ = "recordings" user_id: Mapped[uuid.UUID] = mapped_column(ForeignKey("users.id")) title: Mapped[str] = mapped_column(String(500)) file_path: Mapped[str] = mapped_column(String(1000)) file_size: Mapped[int] = mapped_column(BigInteger) duration: Mapped[float | None] = mapped_column(nullable=True) format: Mapped[str] = mapped_column(String(20)) source: Mapped[RecordingSource] = mapped_column(Enum(RecordingSource)) status: Mapped[RecordingStatus] = mapped_column( Enum(RecordingStatus), default=RecordingStatus.uploaded ) user: Mapped["User"] = relationship(back_populates="recordings") transcription: Mapped["Transcription | None"] = relationship( back_populates="recording", uselist=False )