import uuid import enum from datetime import datetime from sqlalchemy import Column, String, DateTime, Integer, JSON, Enum, ForeignKey from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import relationship from app.database import Base class MeetingStatus(str, enum.Enum): receiving_chunks = "receiving_chunks" uploading = "uploading" processing = "processing" transcribing = "transcribing" analyzing = "analyzing" completed = "completed" error = "error" class Meeting(Base): __tablename__ = "meetings" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, index=True) title = Column(String, nullable=True) date = Column(DateTime, default=datetime.utcnow, nullable=False) duration = Column(Integer, nullable=True) audio_path = Column(String, nullable=True) status = Column(Enum(MeetingStatus), default=MeetingStatus.uploading, nullable=False) transcription = Column(JSON, nullable=True) user_id = Column(UUID(as_uuid=True), ForeignKey("users.id"), nullable=False, index=True) created_at = Column(DateTime, default=datetime.utcnow, nullable=False) user = relationship("User", back_populates="meetings") analyses = relationship("Analysis", back_populates="meeting", cascade="all, delete-orphan") participants = relationship("MeetingParticipant", back_populates="meeting", cascade="all, delete-orphan") @property def owner_email(self): return self.user.email if self.user else None @property def owner_name(self): return self.user.name if self.user else None