From d44f53a8a9c4164c9b6934aa6cba43dda36b6652 Mon Sep 17 00:00:00 2001 From: Matthias Hochmeister Date: Fri, 17 Apr 2026 13:33:07 +0200 Subject: [PATCH] fix(geplante-nachrichten): cache rooms response 60s and pass Nextcloud errors through to frontend --- backend/src/services/scheduledMessages.service.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/backend/src/services/scheduledMessages.service.ts b/backend/src/services/scheduledMessages.service.ts index aaca076..092446a 100644 --- a/backend/src/services/scheduledMessages.service.ts +++ b/backend/src/services/scheduledMessages.service.ts @@ -309,14 +309,19 @@ async function remove(id: string): Promise { // ── Rooms ──────────────────────────────────────────────────────────────────── +let roomsCache: { result: RoomsResult; expiresAt: number } | null = null; + async function getRooms(): Promise { + if (roomsCache && Date.now() < roomsCache.expiresAt) { + return roomsCache.result; + } const creds = await getBotCredentials(); if (!creds) { return { configured: false }; } try { const conversations = await nextcloudService.getAllConversations(creds.username, creds.appPassword); - return { + const result: RoomsResult = { configured: true, data: conversations.map(c => ({ token: c.token, @@ -324,10 +329,12 @@ async function getRooms(): Promise { type: c.type, })), }; + roomsCache = { result, expiresAt: Date.now() + 60_000 }; + return result; } catch (error) { const msg = error instanceof Error ? error.message : String(error); logger.error('scheduledMessages.getRooms failed', { error: msg }); - return { configured: true, data: [], error: msg }; + return { configured: true, data: [], error: 'Verbindung zu Nextcloud fehlgeschlagen' }; } }