feat: implementar Fases 3, 4 y 5 del roadmap (Planificacion Avanzada, Historial de Corridas y Copia Local Duplicada)

This commit is contained in:
Carlos Tello
2026-08-15 00:58:05 -03:00
parent 2c2cfeb867
commit 929f9affd7
11 changed files with 677 additions and 57 deletions
+23
View File
@@ -98,11 +98,34 @@ class BackupJob(Base):
status = Column(String(50), default="IDLE", nullable=False) # IDLE, RUNNING, ERROR, SUCCESS
last_run_at = Column(DateTime(timezone=True), nullable=True)
next_run_at = Column(DateTime(timezone=True), nullable=True)
local_destination_path = Column(String(1024), nullable=True)
created_at = Column(DateTime(timezone=True), default=utc_now, nullable=False)
client = relationship("Client", back_populates="jobs")
backup_files = relationship("BackupFile", back_populates="job", cascade="all, delete-orphan")
backup_sessions = relationship("BackupSession", back_populates="job", cascade="all, delete-orphan")
runs = relationship("JobRun", back_populates="job", cascade="all, delete-orphan")
class JobRun(Base):
__tablename__ = "job_runs"
id = Column(Integer, primary_key=True, index=True)
job_id = Column(Integer, ForeignKey("backup_jobs.id", ondelete="CASCADE"), nullable=False)
client_id = Column(Integer, ForeignKey("clients.id", ondelete="CASCADE"), nullable=False)
started_at = Column(DateTime(timezone=True), default=utc_now, nullable=False)
completed_at = Column(DateTime(timezone=True), nullable=True)
status = Column(String(50), default="RUNNING", nullable=False) # RUNNING, SUCCESS, FAILED
# Detailed execution metrics
files_scanned = Column(Integer, default=0, nullable=False)
files_copied = Column(Integer, default=0, nullable=False)
files_skipped = Column(Integer, default=0, nullable=False)
errors_count = Column(Integer, default=0, nullable=False)
bytes_transferred = Column(BigInteger, default=0, nullable=False)
error_summary = Column(Text, nullable=True)
job = relationship("BackupJob", back_populates="runs")
client = relationship("Client")
class BackupSession(Base):
__tablename__ = "backup_sessions"