use-document-schedule.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /**
  2. * Document Schedule API Hooks
  3. */
  4. import { del, get, post } from '@/service/base'
  5. import type {
  6. CreateScheduleRequest,
  7. Schedule,
  8. ScheduleListResponse,
  9. ScheduleStatistics,
  10. } from '@/models/document-schedule'
  11. import type { CommonResponse } from '@/models/common'
  12. import { useMutation, useQuery } from '@tanstack/react-query'
  13. const NAME_SPACE = 'document-schedule'
  14. // Query Keys
  15. export const useScheduleListKey = (datasetId: string, documentId: string) => {
  16. return [NAME_SPACE, 'list', datasetId, documentId]
  17. }
  18. export const useScheduleDetailKey = (datasetId: string, documentId: string, scheduleId: string) => {
  19. return [NAME_SPACE, 'detail', datasetId, documentId, scheduleId]
  20. }
  21. export const useScheduleStatisticsKey = (datasetId: string) => {
  22. return [NAME_SPACE, 'statistics', datasetId]
  23. }
  24. // Mutations
  25. /**
  26. * Create a scheduled document status change
  27. */
  28. export const useCreateSchedule = () => {
  29. return useMutation({
  30. mutationKey: [NAME_SPACE, 'create'],
  31. mutationFn: (payload: {
  32. datasetId: string
  33. documentId: string
  34. body: CreateScheduleRequest
  35. }) => {
  36. const { datasetId, documentId, body } = payload
  37. return post<Schedule>(
  38. `/datasets/${datasetId}/documents/${documentId}/schedules`,
  39. { body },
  40. )
  41. },
  42. })
  43. }
  44. /**
  45. * Cancel a scheduled task
  46. */
  47. export const useCancelSchedule = () => {
  48. return useMutation({
  49. mutationKey: [NAME_SPACE, 'cancel'],
  50. mutationFn: (payload: {
  51. datasetId: string
  52. documentId: string
  53. scheduleId: string
  54. }) => {
  55. const { datasetId, documentId, scheduleId } = payload
  56. return del<CommonResponse>(
  57. `/datasets/${datasetId}/documents/${documentId}/schedules/${scheduleId}`,
  58. )
  59. },
  60. })
  61. }
  62. // Queries
  63. /**
  64. * Get all schedules for a document
  65. */
  66. export const useDocumentSchedules = (
  67. datasetId: string,
  68. documentId: string,
  69. includeCompleted = false,
  70. ) => {
  71. return useQuery({
  72. queryKey: [...useScheduleListKey(datasetId, documentId), includeCompleted],
  73. queryFn: () => {
  74. const params = new URLSearchParams()
  75. if (includeCompleted)
  76. params.append('include_completed', 'true')
  77. return get<ScheduleListResponse>(
  78. `/datasets/${datasetId}/documents/${documentId}/schedules?${params.toString()}`,
  79. )
  80. },
  81. enabled: !!(datasetId && documentId),
  82. })
  83. }
  84. /**
  85. * Get schedule details
  86. */
  87. export const useScheduleDetail = (
  88. datasetId: string,
  89. documentId: string,
  90. scheduleId: string,
  91. ) => {
  92. return useQuery({
  93. queryKey: useScheduleDetailKey(datasetId, documentId, scheduleId),
  94. queryFn: () =>
  95. get<Schedule>(
  96. `/datasets/${datasetId}/documents/${documentId}/schedules/${scheduleId}`,
  97. ),
  98. enabled: !!(datasetId && documentId && scheduleId),
  99. })
  100. }
  101. /**
  102. * Get schedule statistics for a dataset
  103. */
  104. export const useScheduleStatistics = (datasetId: string) => {
  105. return useQuery({
  106. queryKey: useScheduleStatisticsKey(datasetId),
  107. queryFn: () =>
  108. get<ScheduleStatistics>(
  109. `/datasets/${datasetId}/schedules/statistics`,
  110. ),
  111. enabled: !!datasetId,
  112. })
  113. }