/** * Document Schedule API Hooks */ import { del, get, post } from '@/service/base' import type { CreateScheduleRequest, Schedule, ScheduleListResponse, ScheduleStatistics, } from '@/models/document-schedule' import type { CommonResponse } from '@/models/common' import { useMutation, useQuery } from '@tanstack/react-query' const NAME_SPACE = 'document-schedule' // Query Keys export const useScheduleListKey = (datasetId: string, documentId: string) => { return [NAME_SPACE, 'list', datasetId, documentId] } export const useScheduleDetailKey = (datasetId: string, documentId: string, scheduleId: string) => { return [NAME_SPACE, 'detail', datasetId, documentId, scheduleId] } export const useScheduleStatisticsKey = (datasetId: string) => { return [NAME_SPACE, 'statistics', datasetId] } // Mutations /** * Create a scheduled document status change */ export const useCreateSchedule = () => { return useMutation({ mutationKey: [NAME_SPACE, 'create'], mutationFn: (payload: { datasetId: string documentId: string body: CreateScheduleRequest }) => { const { datasetId, documentId, body } = payload return post( `/datasets/${datasetId}/documents/${documentId}/schedules`, { body }, ) }, }) } /** * Cancel a scheduled task */ export const useCancelSchedule = () => { return useMutation({ mutationKey: [NAME_SPACE, 'cancel'], mutationFn: (payload: { datasetId: string documentId: string scheduleId: string }) => { const { datasetId, documentId, scheduleId } = payload return del( `/datasets/${datasetId}/documents/${documentId}/schedules/${scheduleId}`, ) }, }) } // Queries /** * Get all schedules for a document */ export const useDocumentSchedules = ( datasetId: string, documentId: string, includeCompleted = false, ) => { return useQuery({ queryKey: [...useScheduleListKey(datasetId, documentId), includeCompleted], queryFn: () => { const params = new URLSearchParams() if (includeCompleted) params.append('include_completed', 'true') return get( `/datasets/${datasetId}/documents/${documentId}/schedules?${params.toString()}`, ) }, enabled: !!(datasetId && documentId), }) } /** * Get schedule details */ export const useScheduleDetail = ( datasetId: string, documentId: string, scheduleId: string, ) => { return useQuery({ queryKey: useScheduleDetailKey(datasetId, documentId, scheduleId), queryFn: () => get( `/datasets/${datasetId}/documents/${documentId}/schedules/${scheduleId}`, ), enabled: !!(datasetId && documentId && scheduleId), }) } /** * Get schedule statistics for a dataset */ export const useScheduleStatistics = (datasetId: string) => { return useQuery({ queryKey: useScheduleStatisticsKey(datasetId), queryFn: () => get( `/datasets/${datasetId}/schedules/statistics`, ), enabled: !!datasetId, }) }