feat: implement add media to album functionality with dialog and API integration

This commit is contained in:
2025-11-16 01:38:04 +01:00
parent 43157cef4e
commit 07b797b82b
10 changed files with 321 additions and 57 deletions

View File

@@ -1,4 +1,4 @@
import type { Album } from "@/domain/types"
import type { Album, Media } from "@/domain/types"
import apiClient from "@/services/api-client"
export type CreateAlbumPayload = {
@@ -23,4 +23,47 @@ export const createAlbum = async (
): Promise<Album> => {
const { data } = await apiClient.post('/albums', payload)
return data
}
}
/**
* Fetches all media for a specific album.
*/
export const getAlbumMedia = async (albumId: string): Promise<Media[]> => {
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<void> => {
await apiClient.post(`/albums/${albumId}/media`, payload);
};
/**
* Fetches a single album by its ID.
*/
export const getAlbum = async (albumId: string): Promise<Album> => {
const { data } = await apiClient.get(`/albums/${albumId}`);
return data;
};