from __future__ import annotations from sqlalchemy.ext.asyncio import AsyncSession from app.core.exceptions import FileNotFoundError from app.repositories.backend_repository import BackendRepository from app.repositories.file_repository import FileRepository from app.services.job_service import JobService class RepairService: def __init__(self, session: AsyncSession) -> None: self.session = session self.file_repository = FileRepository(session) self.backend_repository = BackendRepository(session) self.job_service = JobService(session) async def enqueue_repairs_for_file(self, file_id: str) -> int: file_entry = await self.file_repository.get_by_id(file_id) if file_entry is None or file_entry.is_deleted or file_entry.deleted_at is not None: raise FileNotFoundError() await self.job_service.enqueue_file_reconcile(file_id) return 1 async def enqueue_backend_health_checks(self) -> int: backends = await self.backend_repository.list_enabled() enqueued = 0 for backend in backends: await self.job_service.enqueue_backend_health_check(backend.id) enqueued += 1 return enqueued async def enqueue_full_reconcile(self) -> int: await self.job_service.enqueue_full_reconcile() return 1