All checks were successful
CI/CD Pipeline / VM Test - backend-integration (push) Successful in 12s
CI/CD Pipeline / VM Test - full-stack (push) Successful in 9s
CI/CD Pipeline / VM Test - performance (push) Successful in 9s
CI/CD Pipeline / VM Test - security (push) Successful in 9s
CI/CD Pipeline / Backend Linting (push) Successful in 3s
CI/CD Pipeline / Frontend Linting (push) Successful in 24s
CI/CD Pipeline / Nix Flake Check (push) Successful in 53s
CI/CD Pipeline / CI Summary (push) Successful in 1s
CI/CD Pipeline / VM Test - backend-integration (pull_request) Successful in 2s
CI/CD Pipeline / VM Test - full-stack (pull_request) Successful in 2s
CI/CD Pipeline / VM Test - performance (pull_request) Successful in 2s
CI/CD Pipeline / VM Test - security (pull_request) Successful in 2s
CI/CD Pipeline / Backend Linting (pull_request) Successful in 2s
CI/CD Pipeline / Frontend Linting (pull_request) Successful in 16s
CI/CD Pipeline / Nix Flake Check (pull_request) Successful in 38s
CI/CD Pipeline / CI Summary (pull_request) Successful in 0s
93 lines
2.1 KiB
TypeScript
93 lines
2.1 KiB
TypeScript
/**
|
|
* Image library API client.
|
|
*/
|
|
|
|
import { apiClient } from './client';
|
|
|
|
export interface LibraryImage {
|
|
id: string;
|
|
filename: string;
|
|
file_size: number;
|
|
mime_type: string;
|
|
width: number;
|
|
height: number;
|
|
reference_count: number;
|
|
created_at: string;
|
|
thumbnail_url: string | null;
|
|
}
|
|
|
|
export interface LibraryListResponse {
|
|
images: LibraryImage[];
|
|
total: number;
|
|
limit: number;
|
|
offset: number;
|
|
}
|
|
|
|
export interface LibraryStats {
|
|
total_images: number;
|
|
total_size_bytes: number;
|
|
total_board_references: number;
|
|
average_references_per_image: number;
|
|
}
|
|
|
|
export interface AddToBoardRequest {
|
|
board_id: string;
|
|
position?: { x: number; y: number };
|
|
}
|
|
|
|
/**
|
|
* List images in user's library.
|
|
*
|
|
* @param query - Optional search query
|
|
* @param limit - Results per page
|
|
* @param offset - Pagination offset
|
|
* @returns Library image list with pagination info
|
|
*/
|
|
export async function listLibraryImages(
|
|
query?: string,
|
|
limit: number = 50,
|
|
offset: number = 0
|
|
): Promise<LibraryListResponse> {
|
|
let url = `/library/images?limit=${limit}&offset=${offset}`;
|
|
if (query) {
|
|
url += `&query=${encodeURIComponent(query)}`;
|
|
}
|
|
return apiClient.get<LibraryListResponse>(url);
|
|
}
|
|
|
|
/**
|
|
* Add a library image to a board.
|
|
*
|
|
* @param imageId - Image UUID
|
|
* @param request - Add to board request data
|
|
* @returns Response with new board image ID
|
|
*/
|
|
export async function addImageToBoard(
|
|
imageId: string,
|
|
request: AddToBoardRequest
|
|
): Promise<{ id: string; message: string }> {
|
|
return apiClient.post<{ id: string; message: string }>(
|
|
`/library/images/${imageId}/add-to-board`,
|
|
request
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Permanently delete an image from library.
|
|
* This removes it from all boards and deletes the file.
|
|
*
|
|
* @param imageId - Image UUID
|
|
*/
|
|
export async function deleteLibraryImage(imageId: string): Promise<void> {
|
|
return apiClient.delete<void>(`/library/images/${imageId}`);
|
|
}
|
|
|
|
/**
|
|
* Get library statistics.
|
|
*
|
|
* @returns Library statistics
|
|
*/
|
|
export async function getLibraryStats(): Promise<LibraryStats> {
|
|
return apiClient.get<LibraryStats>('/library/stats');
|
|
}
|