diff --git a/frontend/src/hooks/useBackups.ts b/frontend/src/hooks/useBackups.ts new file mode 100644 index 0000000..47ec39b --- /dev/null +++ b/frontend/src/hooks/useBackups.ts @@ -0,0 +1,59 @@ +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; +import { + acknowledgeBackupAlert, + fetchBackupAlerts, + fetchBackupDashboard, + fetchBackupJob, + fetchBackupJobs, + fetchBackupRuns, +} from "../api/backups"; + +export function useBackupJobs() { + return useQuery({ + queryKey: ["backups", "jobs"], + queryFn: fetchBackupJobs, + refetchInterval: 30_000, + }); +} + +export function useBackupJob(jobId: string) { + return useQuery({ + queryKey: ["backups", "jobs", jobId], + queryFn: () => fetchBackupJob(jobId), + enabled: !!jobId, + }); +} + +export function useBackupRuns(jobId?: string, status?: string) { + return useQuery({ + queryKey: ["backups", "runs", jobId, status], + queryFn: () => fetchBackupRuns(jobId, status), + refetchInterval: 15_000, + }); +} + +export function useBackupAlerts(jobId?: string, acknowledged?: boolean, severity?: string) { + return useQuery({ + queryKey: ["backups", "alerts", jobId, acknowledged, severity], + queryFn: () => fetchBackupAlerts(jobId, acknowledged, severity), + refetchInterval: 30_000, + }); +} + +export function useAcknowledgeAlert() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: acknowledgeBackupAlert, + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ["backups", "alerts"] }); + }, + }); +} + +export function useBackupDashboard() { + return useQuery({ + queryKey: ["dashboard", "backups"], + queryFn: fetchBackupDashboard, + refetchInterval: 30_000, + }); +}