import { BaseService } from '@/lib/services/core'; import type { CreateScheduleRequest, DispatchTaskRequest, ListTaskExecutionsRequest, ListTaskExecutionsResponse, Schedule, TaskExecution, TaskMeta, TaskParamType, TaskTypeResponse, UpdateScheduleRequest, } from './types'; export class AdminTaskService extends BaseService { protected static readonly basePath = '/api/v1/admin'; static async getTaskTypes(): Promise { const response = await this.get('/tasks/types'); return response.map((item) => ({ type: item.Type || item.type || '', asynq_task: item.AsynqTask || item.asynq_task || '', name: item.Name || item.name || '', description: item.Description || item.description || '', supports_time: item.SupportsTime ?? item.supports_time ?? false, max_retry: item.MaxRetry ?? item.max_retry ?? 0, queue: item.Queue || item.queue || '', params: (item.Params || item.params || []).map((p) => ({ name: p.Name || p.name || '', label: p.Label || p.label || '', type: (p.Type || p.type || 'string') as TaskParamType, required: p.Required ?? p.required ?? false, placeholder: p.Placeholder || p.placeholder || '', description: p.Description || p.description || '', })), })); } static async dispatchTask(request: DispatchTaskRequest): Promise { return this.post('/tasks/dispatch', request); } static async listTaskExecutions( request: ListTaskExecutionsRequest = {}, ): Promise { return this.get( '/tasks/executions', request as unknown as Record, ); } static async getTaskExecution(id: string): Promise { return this.get(`/tasks/executions/${id}`); } static async retryTaskExecution(id: string): Promise { return this.post(`/tasks/executions/${id}/retry`); } static async listSchedules(): Promise { return this.get('/tasks/schedules'); } static async createSchedule( request: CreateScheduleRequest, ): Promise { return this.post('/tasks/schedules', request); } static async updateSchedule( id: string, request: UpdateScheduleRequest, ): Promise { return this.put(`/tasks/schedules/${id}`, request); } static async deleteSchedule(id: string): Promise { return this.delete(`/tasks/schedules/${id}`); } }