""" Activity log model for audit trail """ import uuid from datetime import datetime from typing import Optional from sqlalchemy import Column, String, Integer, DateTime, Text, ForeignKey, Index from sqlalchemy.orm import relationship from sqlalchemy.sql import func from sqlalchemy.dialects.sqlite import JSON from ..core.database import Base class ActivityLog(Base): """Activity log for audit trail""" __tablename__ = "activity_log" id = Column(Integer, primary_key=True, autoincrement=True) timestamp = Column(DateTime, default=func.now(), nullable=False) event_type = Column(String, nullable=False) # playlist_added, video_downloaded, check_completed, etc. # Optional foreign keys playlist_id = Column(String, ForeignKey("playlists.id", ondelete="CASCADE"), nullable=True) video_id = Column(String, ForeignKey("videos.id", ondelete="CASCADE"), nullable=True) # Details as JSON blob details = Column(Text, nullable=True) # JSON string with additional details # Relationships playlist = relationship("PlaylistSubscription") video = relationship("VideoRecord") def __repr__(self): return f"" # Create indexes for better query performance Index("idx_activity_log_timestamp", ActivityLog.timestamp) Index("idx_activity_log_event_type", ActivityLog.event_type) Index("idx_activity_log_playlist_id", ActivityLog.playlist_id) Index("idx_activity_log_video_id", ActivityLog.video_id)