import json from core.dal.base_repository import BaseRepository class EventRepository(BaseRepository): def insert( self, server_id: int, event_type: str, actor: str = "system", detail: dict | None = None, ) -> None: self._execute( """ INSERT INTO server_events (server_id, event_type, actor, detail) VALUES (:sid, :et, :actor, :detail) """, { "sid": server_id, "et": event_type, "actor": actor, "detail": json.dumps(detail) if detail else None, }, ) def get_events( self, server_id: int, limit: int = 50, offset: int = 0, event_type: str | None = None, ) -> list[dict]: if event_type: return self._fetchall( """ SELECT * FROM server_events WHERE server_id = :sid AND event_type = :et ORDER BY created_at DESC LIMIT :limit OFFSET :offset """, {"sid": server_id, "et": event_type, "limit": limit, "offset": offset}, ) return self._fetchall( """ SELECT * FROM server_events WHERE server_id = :sid ORDER BY created_at DESC LIMIT :limit OFFSET :offset """, {"sid": server_id, "limit": limit, "offset": offset}, ) def get_recent_all_servers(self, limit: int = 20) -> list[dict]: return self._fetchall( "SELECT * FROM server_events ORDER BY created_at DESC LIMIT :limit", {"limit": limit}, ) def cleanup_old(self, retention_days: int) -> None: """Delete events older than retention_days.""" self._execute( "DELETE FROM server_events WHERE created_at < datetime('now', :delta)", {"delta": f"-{retention_days} days"}, )