Initial commit: CloudRestoreAS v1.0.0 - Aplicación completa de restauración automática SQL Server

This commit is contained in:
2026-01-25 16:53:00 -07:00
commit 854ffa116f
43 changed files with 6357 additions and 0 deletions

View File

@@ -0,0 +1,77 @@
"""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]