From b5fa9e7d06d218ef16b78e8348571190f7046957 Mon Sep 17 00:00:00 2001 From: matthieu Date: Sun, 15 Mar 2026 18:15:20 +0100 Subject: [PATCH] feat(bookstack) : add frontend BookStack service Co-Authored-By: Claude Sonnet 4.6 --- frontend/services/bookstack.ts | 66 ++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 frontend/services/bookstack.ts diff --git a/frontend/services/bookstack.ts b/frontend/services/bookstack.ts new file mode 100644 index 0000000..967755c --- /dev/null +++ b/frontend/services/bookstack.ts @@ -0,0 +1,66 @@ +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, + } +}