import type { Album, AlbumPermission, Media, User } from "@/domain/types"; import apiClient from "@/services/api-client"; import { processMediaUrls } from "./media-service"; // --- Types --- export type CreateAlbumPayload = { name: string; description?: string; }; export type UpdateAlbumPayload = Partial & { is_public?: boolean; }; export type AddMediaToAlbumPayload = { media_ids: string[]; }; export type RemoveMediaFromAlbumPayload = { media_ids: string[]; }; export type ShareAlbumPayload = { target_user_id: string; permission: AlbumPermission; }; export type SetAlbumThumbnailPayload = { media_id: string; }; // --- Service Functions --- export const getAlbums = async (): Promise => { const { data } = await apiClient.get("/albums"); return data; // Album object doesn't have URLs }; export const getAlbum = async (albumId: string): Promise => { const { data } = await apiClient.get(`/albums/${albumId}`); return data; // Album object doesn't have URLs }; export const createAlbum = async ( payload: CreateAlbumPayload, ): Promise => { const { data } = await apiClient.post("/albums", payload); return data; }; export const updateAlbum = async ( albumId: string, payload: UpdateAlbumPayload, ): Promise => { const { data } = await apiClient.put(`/albums/${albumId}`, payload); return data; }; export const deleteAlbum = async (albumId: string): Promise => { await apiClient.delete(`/albums/${albumId}`); }; export const getAlbumMedia = async (albumId: string): Promise => { const { data } = await apiClient.get(`/albums/${albumId}/media`); return data.map(processMediaUrls); // Process all media URLs }; export const addMediaToAlbum = async ( albumId: string, payload: AddMediaToAlbumPayload, ): Promise => { await apiClient.post(`/albums/${albumId}/media`, payload); }; export const removeMediaFromAlbum = async ( albumId: string, payload: RemoveMediaFromAlbumPayload, ): Promise => { await apiClient.delete(`/albums/${albumId}/media`, { data: payload }); }; export const shareAlbum = async ( albumId: string, payload: ShareAlbumPayload, ): Promise => { await apiClient.post(`/albums/${albumId}/share`, payload); }; export const unshareAlbum = async ( albumId: string, targetUserId: string, ): Promise => { await apiClient.delete(`/albums/${albumId}/share`, { data: { target_user_id: targetUserId }, }); }; export const setAlbumThumbnail = async ( albumId: string, payload: SetAlbumThumbnailPayload, ): Promise => { await apiClient.put(`/albums/${albumId}/thumbnail`, payload); }; export type AlbumShare = { user: User; permission: AlbumPermission; }; export const getAlbumShares = async (albumId: string): Promise => { const { data } = await apiClient.get(`/albums/${albumId}/share`); return data; };