import type { Album, Media } from "@/domain/types" import apiClient from "@/services/api-client" export type CreateAlbumPayload = { name: string description?: string } /** * Fetches a list of albums. * TODO: This should become paginated later. */ export const getAlbums = async (): Promise => { const { data } = await apiClient.get('/albums') return data } /** * Creates a new album. */ export const createAlbum = async ( payload: CreateAlbumPayload, ): Promise => { const { data } = await apiClient.post('/albums', payload) return data } /** * Fetches all media for a specific album. */ export const getAlbumMedia = async (albumId: string): Promise => { const { data } = await apiClient.get(`/albums/${albumId}/media`); const prefix = import.meta.env.VITE_PREFIX_PATH || apiClient.defaults.baseURL; const processedMedia = data.map((media: Media) => ({ ...media, file_url: `${prefix}${media.file_url}`, thumbnail_url: media.thumbnail_url ? `${prefix}${media.thumbnail_url}` : null, })); return processedMedia; }; export type AddMediaToAlbumPayload = { media_ids: string[]; }; /** * Adds a list of media IDs to a specific album. */ export const addMediaToAlbum = async ( albumId: string, payload: AddMediaToAlbumPayload, ): Promise => { await apiClient.post(`/albums/${albumId}/media`, payload); }; /** * Fetches a single album by its ID. */ export const getAlbum = async (albumId: string): Promise => { const { data } = await apiClient.get(`/albums/${albumId}`); return data; }; export type RemoveMediaFromAlbumPayload = { media_ids: string[]; }; /** * Removes a list of media IDs from a specific album. */ export const removeMediaFromAlbum = async ( albumId: string, payload: RemoveMediaFromAlbumPayload, ): Promise => { await apiClient.delete(`/albums/${albumId}/media`, { data: payload }); };