import ApiService from './api.service' import type { FileItem, CreateFolderRequest, RenameItemRequest, MoveItemRequest, DeleteItemRequest, UploadFileRequest, } from '@/types/fileManagement' class FileManagementService { // Get files and folders for a specific directory async getItems(folderId?: string): Promise<{ data: { items: FileItem[] } }> { const params = folderId ? { parentId: folderId } : {} return ApiService.fetchData<{ items: FileItem[] }>({ url: `/api/files`, method: 'GET', params, }) } // Create a new folder async createFolder(request: CreateFolderRequest): Promise<{ data: FileItem }> { return ApiService.fetchData({ url: `/api/files/folders`, method: 'POST', data: request as any, }) } // Upload a file async uploadFile(request: UploadFileRequest): Promise<{ data: FileItem }> { const formData = new FormData() formData.append('file', request.file) if (request.parentId) { formData.append('parentId', request.parentId) } return ApiService.fetchData({ url: `/api/files/upload`, method: 'POST', data: formData as any, headers: { 'Content-Type': 'multipart/form-data', }, }) } // Rename a file or folder async renameItem(request: RenameItemRequest): Promise<{ data: FileItem }> { return ApiService.fetchData({ url: `/api/files/${request.id}/rename`, method: 'PUT', data: { name: request.newName }, }) } // Move a file or folder async moveItem(request: MoveItemRequest): Promise<{ data: FileItem }> { return ApiService.fetchData({ url: `/api/files/${request.itemId}/move`, method: 'PUT', data: { targetFolderId: request.targetFolderId }, }) } // Delete a file or folder async deleteItem(request: DeleteItemRequest): Promise { await ApiService.fetchData({ url: `/api/files/${request.id}`, method: 'DELETE', }) } // Download a file async downloadFile(fileId: string): Promise { const response = await ApiService.fetchData({ url: `/api/files/${fileId}/download`, method: 'GET', responseType: 'blob', }) return response.data } // Get file preview/thumbnail async getFilePreview(fileId: string): Promise { const response = await ApiService.fetchData({ url: `/api/files/${fileId}/preview`, method: 'GET', responseType: 'blob', }) return URL.createObjectURL(response.data) } // Search files and folders async searchItems(query: string, folderId?: string): Promise<{ data: { items: FileItem[] } }> { const params = { q: query, ...(folderId && { parentId: folderId }), } return ApiService.fetchData<{ items: FileItem[] }>({ url: `/api/files/search`, method: 'GET', params, }) } // Get folder breadcrumb path async getFolderPath(folderId?: string): Promise<{ data: { path: Array<{ id: string; name: string }> } }> { return ApiService.fetchData<{ path: Array<{ id: string; name: string }> }>({ url: `/api/files/folders/${folderId || 'root'}/path`, method: 'GET', }) } } export default new FileManagementService()