import type { Complete } from './completeRequest'; import { ApiError, request, requestWithMeta, type ResponseWithMeta } from './client'; import type { components } from './generated/v1'; export type MultiCollection = components['schemas']['MultiCollectionResponseModel']; export type MultiCollectionItem = components['schemas']['MultiCollectionItemResponseModel']; export type MultiCollectionItemRequest = components['schemas']['MultiCollectionItemRequest']; export type PagedMultiCollections = components['schemas']['PagedMultiCollectionsResponseModel']; export type CreateMultiCollectionRequest = components['schemas']['CreateMultiCollectionRequest']; export type UpdateMultiCollectionRequest = components['schemas']['UpdateMultiCollectionRequest']; export interface GetMultiCollectionsParams { query?: string; pageNum?: number; pageSize?: number; } export function getMultiCollections(params: GetMultiCollectionsParams = {}): Promise { const searchParams = new URLSearchParams(); if (params.query != null) { searchParams.set('query', params.query); } if (params.pageNum != null) { searchParams.set('pageNum', String(params.pageNum)); } if (params.pageSize != null) { searchParams.set('pageSize', String(params.pageSize)); } const queryString = searchParams.toString(); return request(`/api/v1/multi-collections${queryString ? `?${queryString}` : ''}`); } export function getMultiCollection(id: number): Promise { return request(`/api/v1/multi-collections/${id}`); } /** Load a single multi-collection together with its concurrency ETag (issue #253). */ export function getMultiCollectionWithMeta(id: number): Promise> { return requestWithMeta(`/api/v1/multi-collections/${id}`); } export function createMultiCollection(body: CreateMultiCollectionRequest): Promise { return request('/api/v1/multi-collections', { body, method: 'POST' }); } /** * Update a multi-collection. Pass the last-seen ETag as `If-Match` to reject a stale overwrite * with 412; the resolved value carries the new ETag for a subsequent save (issue #253). */ export function updateMultiCollection( id: number, body: Complete, ifMatch?: string | null ): Promise> { return requestWithMeta(`/api/v1/multi-collections/${id}`, { body, method: 'PUT', headers: ifMatch ? { 'If-Match': ifMatch } : undefined }); } export function deleteMultiCollection(id: number): Promise { return request(`/api/v1/multi-collections/${id}`, { method: 'DELETE' }); } export function messageFromMultiCollectionError( error: unknown, fallback = 'Unable to load multi-collections' ): string { if (error instanceof ApiError) { return error.detail ?? error.message; } if (error instanceof Error) { return error.message; } return fallback; }