se agregaron nuevas caracteristicas

This commit is contained in:
Carlos Tello
2026-08-13 23:07:01 -03:00
parent 1bfb808c79
commit d736db982e
23 changed files with 1244 additions and 100 deletions
+69 -1
View File
@@ -6,7 +6,7 @@ from sqlalchemy import select, func, desc
from app.core.database import get_db
from app.models.models import User, Client, BackupJob
from app.schemas.schemas import JobCreate, JobUpdate, JobResponse
from app.schemas.schemas import JobCreate, JobUpdate, JobResponse, AgentJobRegister
from app.api.deps import get_current_user, require_admin, get_current_client
from app.services.event_service import log_event
from app.ws.manager import ws_manager
@@ -36,6 +36,74 @@ async def get_agent_jobs(
result = await db.execute(query)
return result.scalars().all()
@router.post("/agent/register", response_model=JobResponse)
async def agent_register_job(
payload: AgentJobRegister,
db: AsyncSession = Depends(get_db),
current_client: Client = Depends(get_current_client)
):
"""Called by the Windows Agent to register a new local job/folder on the server."""
count_res = await db.execute(select(func.count(BackupJob.id)))
job_count = count_res.scalar() or 0
job_code = f"JOB-{job_count + 1:03d}"
job = BackupJob(
job_code=job_code,
client_id=current_client.id,
name=payload.name,
source_path=payload.source_path,
file_patterns=payload.file_patterns,
schedule_cron=payload.schedule_cron,
keep_daily=payload.keep_daily,
keep_weekly=payload.keep_weekly,
keep_monthly=payload.keep_monthly,
min_stable_time_seconds=payload.min_stable_time_seconds,
status="IDLE",
is_active=True
)
db.add(job)
await db.commit()
await db.refresh(job)
await log_event(
db=db,
event_type="JOB_CREATED",
message=f"Agent registered backup job '{job.name}' ({job.job_code}) from device.",
severity="INFO",
client_id=current_client.id,
job_id=job.id
)
return job
@router.delete("/agent/{job_id}")
async def agent_delete_job(
job_id: int,
db: AsyncSession = Depends(get_db),
current_client: Client = Depends(get_current_client)
):
"""Called by the Windows Agent to delete a backup job it owns."""
res = await db.execute(select(BackupJob).where(BackupJob.id == job_id, BackupJob.client_id == current_client.id))
job = res.scalar_one_or_none()
if not job:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Job not found or not owned by this client"
)
await db.delete(job)
await db.commit()
await log_event(
db=db,
event_type="JOB_DELETED",
message=f"Agent deleted backup job {job.job_code} from device.",
severity="WARNING",
client_id=current_client.id
)
return {"message": "Job successfully deleted by agent"}
@router.post("", response_model=JobResponse)
async def create_job(
payload: JobCreate,