| 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) |