import type { BookStackSettings, BookStackSettingsWrite, BookStackTestResult, BookStackShelf, BookStackLink, BookStackLinkCreate, BookStackSearchResult, } from './dto/bookstack' import type { HydraCollection } from '~/utils/api' import { extractHydraMembers } from '~/utils/api' export function useBookStackService() { const api = useApi() async function getSettings(): Promise { return api.get('/settings/bookstack') } async function saveSettings(payload: BookStackSettingsWrite): Promise { return api.put('/settings/bookstack', payload as Record, { toastSuccessKey: 'bookstack.settings.saved', }) } async function testConnection(): Promise { return api.post('/settings/bookstack/test') } async function listShelves(): Promise { const data = await api.get>('/bookstack/shelves') return extractHydraMembers(data) } async function getLinks(taskId: number): Promise { const data = await api.get>(`/tasks/${taskId}/bookstack/links`) return extractHydraMembers(data) } async function addLink(taskId: number, payload: BookStackLinkCreate): Promise { return api.post(`/tasks/${taskId}/bookstack/links`, payload as Record) } async function removeLink(taskId: number, linkId: number): Promise { await api.delete(`/tasks/${taskId}/bookstack/links/${linkId}`) } async function search(taskId: number, query: string): Promise { const data = await api.get>( `/tasks/${taskId}/bookstack/search`, { q: query }, ) return extractHydraMembers(data) } return { getSettings, saveSettings, testConnection, listShelves, getLinks, addLink, removeLink, search, } }