import { FlowRun, FlowRunResponse } from '@/models' import { TaskRunHistoryResponse } from '@/models/api/TaskRunHistoryResponse' import { TaskRunResponse } from '@/models/api/TaskRunResponse' import { FlowRunsPaginationFilter, TaskRunsFilter, TaskRunsHistoryFilter, TaskRunsPaginationFilter } from '@/models/Filters' import { Paginated } from '@/models/pagination' import { StateUpdate } from '@/models/StateUpdate' import { TaskRun } from '@/models/TaskRun' import { TaskRunHistory } from '@/models/TaskRunHistory' import { BatchProcessor } from '@/services/BatchProcessor' import { mapper } from '@/services/Mapper' import { WorkspaceApi } from '@/services/WorkspaceApi' import { toMap } from '@/utilities' export class WorkspaceTaskRunsApi extends WorkspaceApi { protected override routePrefix = '/task_runs' private readonly batcher = new BatchProcessor(async ids => { if (ids.length === 1) { const [id] = ids const { data } = await this.get(`/${id}`) return () => mapper.map('TaskRunResponse', data, 'TaskRun') } const taskRuns = await this.getTaskRuns({ taskRuns: { id: ids, }, }) return toMap(taskRuns, 'id') }, { maxBatchSize: 200 }) public getTaskRun(taskRunId: string): Promise { return this.batcher.batch(taskRunId) } public async getTaskRuns(filter: TaskRunsFilter = {}): Promise { const request = mapper.map('TaskRunsFilter', filter, 'TaskRunsFilterRequest') const { data } = await this.post('/filter', request) return mapper.map('TaskRunResponse', data, 'TaskRun') } public async getTaskRunsPaginated(filter: TaskRunsPaginationFilter = {}): Promise> { const request = mapper.map('TaskRunsPaginationFilter', filter, 'TaskRunsPaginationFilterRequest') const { data } = await this.post>('/paginate', request) return mapper.map('TaskRunsPaginationResponse', data, 'TaskRunsPagination') } public async getTaskRunsCount(filter: TaskRunsFilter = {}): Promise { const request = mapper.map('TaskRunsFilter', filter, 'TaskRunsFilterRequest') const { data } = await this.post('/count', request) return data } public setTaskRunState(id: string, body: StateUpdate): Promise { const requestBody = mapper.map('StateUpdate', body, 'StateUpdateRequest') return this.post(`/${id}/set_state`, { state: requestBody.state, force: true }) } public deleteTaskRun(taskRunId: string): Promise { return this.delete(`/${taskRunId}`) } public async getTaskRunsHistory(filter: TaskRunsHistoryFilter): Promise { const request = mapper.map('TaskRunsHistoryFilter', filter, 'TaskRunsHistoryFilterRequest') const { data } = await this.post('/history', request) return mapper.map('TaskRunHistoryResponse', data, 'TaskRunHistory') } }