feat(web): add file manager and task types with API clients

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
dailz
2026-04-20 10:39:38 +08:00
parent d71cda3420
commit f5e021d652
4 changed files with 211 additions and 0 deletions

49
web/src/api/files.ts Normal file
View File

@@ -0,0 +1,49 @@
import type { ApiResponse } from '@/types/jobs'
import apiClient from '@/api/client'
import type { FileResponse, ListFilesResponse, UploadSessionResponse, InitUploadRequest, FolderResponse, CreateFolderRequest } from '@/types/files'
export function listFiles(params?: { folder_id?: number; page?: number; page_size?: number; search?: string }): Promise<ApiResponse<ListFilesResponse>> {
return apiClient.get('/files', { params })
}
export function getFile(id: number): Promise<ApiResponse<FileResponse>> {
return apiClient.get(`/files/${id}`)
}
export function deleteFile(id: number): Promise<ApiResponse<{ message: string }>> {
return apiClient.delete(`/files/${id}`)
}
export function downloadFileUrl(id: number): string {
return `/api/v1/files/${id}/download`
}
export function initUpload(data: InitUploadRequest): Promise<ApiResponse<FileResponse | UploadSessionResponse>> {
return apiClient.post('/files/uploads', data)
}
export function uploadChunk(sessionId: number, chunkIndex: number, chunk: Blob): Promise<ApiResponse<{ message: string }>> {
const formData = new FormData()
formData.append('chunk', chunk)
return apiClient.put(`/files/uploads/${sessionId}/chunks/${chunkIndex}`, formData)
}
export function completeUpload(sessionId: number): Promise<ApiResponse<FileResponse>> {
return apiClient.post(`/files/uploads/${sessionId}/complete`)
}
export function cancelUpload(sessionId: number): Promise<ApiResponse<{ message: string }>> {
return apiClient.post(`/files/uploads/${sessionId}/cancel`)
}
export function listFolders(params?: { parent_id?: number | null }): Promise<ApiResponse<FolderResponse[]>> {
return apiClient.get('/files/folders', { params })
}
export function createFolder(data: CreateFolderRequest): Promise<ApiResponse<FolderResponse>> {
return apiClient.post('/files/folders', data)
}
export function deleteFolder(id: number): Promise<ApiResponse<{ message: string }>> {
return apiClient.delete(`/files/folders/${id}`)
}

15
web/src/api/tasks.ts Normal file
View File

@@ -0,0 +1,15 @@
import type { ApiResponse } from '@/types/jobs'
import apiClient from '@/api/client'
import type { ApplicationListResponse, CreateTaskRequest, TaskListResponse } from '@/types/tasks'
export function getApplications(params?: { page?: number; page_size?: number }): Promise<ApiResponse<ApplicationListResponse>> {
return apiClient.get('/applications', { params })
}
export function createTask(data: CreateTaskRequest): Promise<ApiResponse<{ id: number }>> {
return apiClient.post('/tasks', data)
}
export function listTasks(params?: { page?: number; page_size?: number; status?: string }): Promise<ApiResponse<TaskListResponse>> {
return apiClient.get('/tasks', { params })
}