erp-platform/ui/src/services/fileManagement.service.ts
2025-10-26 03:19:18 +03:00

119 lines
No EOL
3.2 KiB
TypeScript

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<FileItem>({
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<FileItem>({
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<FileItem>({
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<FileItem>({
url: `/api/files/${request.itemId}/move`,
method: 'PUT',
data: { targetFolderId: request.targetFolderId },
})
}
// Delete a file or folder
async deleteItem(request: DeleteItemRequest): Promise<void> {
await ApiService.fetchData<void>({
url: `/api/files/${request.id}`,
method: 'DELETE',
})
}
// Download a file
async downloadFile(fileId: string): Promise<Blob> {
const response = await ApiService.fetchData<Blob>({
url: `/api/files/${fileId}/download`,
method: 'GET',
responseType: 'blob',
})
return response.data
}
// Get file preview/thumbnail
async getFilePreview(fileId: string): Promise<string> {
const response = await ApiService.fetchData<Blob>({
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()