42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
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
|