"""Repositorio para gestionar eventos.""" from typing import Optional, List from datetime import datetime from dataclasses import dataclass from .database import db @dataclass class Event: """Modelo de Event.""" id: int created_at: str level: str job_id: Optional[str] message: str class EventRepository: """Repositorio para operaciones con eventos.""" @staticmethod def create( level: str, message: str, job_id: Optional[str] = None ) -> int: """ Crea un nuevo evento. Args: level: Nivel del evento (DEBUG, INFO, WARNING, ERROR, CRITICAL) message: Mensaje del evento job_id: ID del job asociado (opcional) Returns: ID del evento creado """ now = datetime.utcnow().isoformat() cursor = db.execute(""" INSERT INTO events (created_at, level, job_id, message) VALUES (?, ?, ?, ?) """, (now, level, job_id, message)) return cursor.lastrowid @staticmethod def get_all( level: Optional[str] = None, job_id: Optional[str] = None, limit: int = 100 ) -> List[Event]: """ Obtiene eventos con filtros opcionales. Args: level: Filtrar por nivel job_id: Filtrar por job limit: LĂ­mite de resultados Returns: Lista de eventos """ query = "SELECT * FROM events WHERE 1=1" params = [] if level: query += " AND level = ?" params.append(level) if job_id: query += " AND job_id = ?" params.append(job_id) query += f" ORDER BY created_at DESC LIMIT {limit}" rows = db.fetchall(query, tuple(params)) return [Event(**dict(row)) for row in rows]