tubewatch/playlist-monitor/app/models/activity_log.py

45 lines
1.6 KiB
Python

"""
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"<ActivityLog(id='{self.id}', event_type='{self.event_type}', timestamp='{self.timestamp}')>"
# 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)