import type { Media, MediaDetails, PaginatedResponse } from "@/domain/types" import apiClient from "@/services/api-client" type MediaListParams = { page: number; limit: number; sort_by?: string; order?: "asc" | "desc"; mime_type?: string; }; const API_PREFIX = import.meta.env.VITE_PREFIX_PATH || ""; export const processMediaUrls = (media: Media): Media => ({ ...media, file_url: `${API_PREFIX}${media.file_url}`, thumbnail_url: media.thumbnail_url ? `${API_PREFIX}${media.thumbnail_url}` : null, }); /** * Fetches a paginated list of media. */ export const getMediaList = async ({ page, limit, sort_by, order, mime_type, }: MediaListParams): Promise> => { const { data } = await apiClient.get("/media", { params: { page, limit, sort_by, order, mime_type }, }); data.data = data.data.map(processMediaUrls); return data; }; /** * Uploads a new media file. */ export const uploadMedia = async ( file: File, onProgress: (progress: number) => void, ): Promise => { const formData = new FormData(); formData.append("file", file); const { data } = await apiClient.post("/media", formData, { headers: { "Content-Type": "multipart/form-data", }, onUploadProgress: (progressEvent) => { const percentCompleted = Math.round( (progressEvent.loaded * 100) / (progressEvent.total ?? 100), ); onProgress(percentCompleted); }, }); // Process the single media object returned by the upload return processMediaUrls(data); }; /** * Fetches the details for a single media item. */ export const getMediaDetails = async ( mediaId: string, ): Promise => { const { data } = await apiClient.get(`/media/${mediaId}`); console.log('Data for media details: ', data); // Process the media URLs in the details response data.file_url = `${API_PREFIX}${data.file_url}`; data.thumbnail_url = data.thumbnail_url ? `${API_PREFIX}${data.thumbnail_url}` : null; return data; }; /** * Deletes a media item by its ID. */ export const deleteMedia = async (mediaId: string): Promise => { await apiClient.delete(`/media/${mediaId}`); };