File size: 2,121 Bytes
8ae78b0 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | from sqlalchemy import Column, String, Integer, Float, DateTime, Boolean, Text, LargeBinary, JSON, ForeignKey
from datetime import datetime, timezone
from app.db.base import Base
class Video(Base):
"""Database model for video metadata."""
__tablename__ = "videos"
id = Column(String, primary_key=True, index=True)
original_filename = Column(String, nullable=False)
upload_date = Column(DateTime, default=lambda: datetime.now(timezone.utc))
file_path = Column(String, nullable=False)
size = Column(Integer, nullable=False)
duration = Column(Float, nullable=True)
status = Column(String, default="uploaded")
class ProcessingResult(Base):
"""Database model for video processing results."""
__tablename__ = "processing_results"
id = Column(String, primary_key=True, index=True)
video_id = Column(String, ForeignKey('videos.id'), nullable=False)
processing_date = Column(DateTime, default=lambda: datetime.now(timezone.utc))
transcript = Column(Text, nullable=True)
emotion_analysis = Column(JSON, nullable=True)
overall_summary = Column(Text, nullable=True)
transcript_analysis = Column(JSON, nullable=True)
recommendations = Column(JSON, nullable=True)
body_language_analysis = Column(JSON, nullable=True)
body_language_data = Column(JSON, nullable=True)
eye_contact_analysis = Column(JSON, nullable=True)
eye_contact_data = Column(JSON, nullable=True)
face_analysis_data = Column(JSON, nullable=True)
class User(Base):
"""Database model for user data."""
__tablename__ = "users"
id = Column(String, primary_key=True, index=True)
email = Column(String, unique=True, index=True, nullable=False)
first_name = Column(String, nullable=False)
last_name = Column(String, nullable=False)
hashed_password = Column(String, nullable=False)
created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc))
updated_at = Column(DateTime, default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc))
is_active = Column(Boolean, default=True) |