diff --git a/frontend/src/api/index.ts b/frontend/src/api/index.ts index d47874a2..d67e774c 100644 --- a/frontend/src/api/index.ts +++ b/frontend/src/api/index.ts @@ -29,3 +29,4 @@ export { flowProposalsApi } from './flowProposals' export { flowpilotAnalyticsApi } from './flowpilotAnalytics' export { notificationsApi } from './notifications' export { publicTemplatesApi } from './publicTemplates' +export { uploadsApi, default as uploadsApiDefault } from './uploads' diff --git a/frontend/src/api/uploads.ts b/frontend/src/api/uploads.ts new file mode 100644 index 00000000..89aff27c --- /dev/null +++ b/frontend/src/api/uploads.ts @@ -0,0 +1,32 @@ +import apiClient from './client' +import type { FileUploadResponse } from '@/types/upload' + +export const uploadsApi = { + async upload(file: File, sessionId?: string): Promise { + const formData = new FormData() + formData.append('file', file) + if (sessionId) formData.append('session_id', sessionId) + const response = await apiClient.post('/uploads', formData, { + headers: { 'Content-Type': 'multipart/form-data' }, + }) + return response.data + }, + + async getUrl(id: string): Promise { + const response = await apiClient.get<{ url: string }>(`/uploads/${id}/url`) + return response.data.url + }, + + async list(sessionId: string): Promise { + const response = await apiClient.get('/uploads', { + params: { session_id: sessionId }, + }) + return response.data + }, + + async remove(id: string): Promise { + await apiClient.delete(`/uploads/${id}`) + }, +} + +export default uploadsApi diff --git a/frontend/src/types/index.ts b/frontend/src/types/index.ts index 31fdda1e..71decc0a 100644 --- a/frontend/src/types/index.ts +++ b/frontend/src/types/index.ts @@ -15,6 +15,7 @@ export type { AssistantChat, AssistantChatMessage, ChatListItem, ChatMessageResp export * from './ai-session' export * from './flow-proposal' export * from './flowpilot-analytics' +export * from './upload' // API response wrapper types export interface PaginatedResponse { diff --git a/frontend/src/types/upload.ts b/frontend/src/types/upload.ts new file mode 100644 index 00000000..1ad38507 --- /dev/null +++ b/frontend/src/types/upload.ts @@ -0,0 +1,17 @@ +export interface FileUploadResponse { + id: string + filename: string + content_type: string + size_bytes: number + url: string + created_at: string +} + +export interface PendingUpload { + id: string + file: File + preview: string + status: 'uploading' | 'done' | 'error' + result?: FileUploadResponse + error?: string +}