import axios from 'axios'; import type { FileLibrary, FileCategory } from '../../share/types.ts'; import type { MinioUploadPolicy, OSSUploadPolicy } from '@d8d-appcontainer/types'; interface FileUploadPolicyResponse { message: string; data: MinioUploadPolicy | OSSUploadPolicy; } interface FileListResponse { message: string; data: { list: FileLibrary[]; pagination: { current: number; pageSize: number; total: number; }; }; } interface FileSaveResponse { message: string; data: FileLibrary; } interface FileInfoResponse { message: string; data: FileLibrary; } interface FileDeleteResponse { message: string; } interface FileCategoryListResponse { data: FileCategory[]; total: number; page: number; pageSize: number; } interface FileCategoryCreateResponse { message: string; data: FileCategory; } interface FileCategoryUpdateResponse { message: string; data: FileCategory; } interface FileCategoryDeleteResponse { message: string; } export const FileAPI = { getUploadPolicy: async (filename: string, prefix: string = 'uploads/', maxSize: number = 10 * 1024 * 1024): Promise => { try { const response = await axios.get('/upload/policy', { params: { filename, prefix, maxSize } }); return response.data; } catch (error) { throw error; } }, saveFileInfo: async (fileData: Partial): Promise => { try { const response = await axios.post('/upload/save', fileData); return response.data; } catch (error) { throw error; } }, getFileList: async (params?: { page?: number, pageSize?: number, category_id?: number, fileType?: string, keyword?: string }): Promise => { try { const response = await axios.get('/upload/list', { params }); return response.data; } catch (error) { throw error; } }, getFileInfo: async (id: number): Promise => { try { const response = await axios.get(`/upload/${id}`); return response.data; } catch (error) { throw error; } }, updateDownloadCount: async (id: number): Promise => { try { const response = await axios.post(`/upload/${id}/download`); return response.data; } catch (error) { throw error; } }, deleteFile: async (id: number): Promise => { try { const response = await axios.delete(`/upload/${id}`); return response.data; } catch (error) { throw error; } }, getCategories: async (params?: { page?: number, pageSize?: number, search?: string }): Promise => { try { const response = await axios.get('/file-categories', { params }); return response.data; } catch (error) { throw error; } }, createCategory: async (data: Partial): Promise => { try { const response = await axios.post('/file-categories', data); return response.data; } catch (error) { throw error; } }, updateCategory: async (id: number, data: Partial): Promise => { try { const response = await axios.put(`/file-categories/${id}`, data); return response.data; } catch (error) { throw error; } }, deleteCategory: async (id: number): Promise => { try { const response = await axios.delete(`/file-categories/${id}`); return response.data; } catch (error) { throw error; } } };