fix(geplante-nachrichten): cache rooms response 60s and pass Nextcloud errors through to frontend
This commit is contained in:
@@ -309,14 +309,19 @@ async function remove(id: string): Promise<boolean> {
|
|||||||
|
|
||||||
// ── Rooms ────────────────────────────────────────────────────────────────────
|
// ── Rooms ────────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
let roomsCache: { result: RoomsResult; expiresAt: number } | null = null;
|
||||||
|
|
||||||
async function getRooms(): Promise<RoomsResult> {
|
async function getRooms(): Promise<RoomsResult> {
|
||||||
|
if (roomsCache && Date.now() < roomsCache.expiresAt) {
|
||||||
|
return roomsCache.result;
|
||||||
|
}
|
||||||
const creds = await getBotCredentials();
|
const creds = await getBotCredentials();
|
||||||
if (!creds) {
|
if (!creds) {
|
||||||
return { configured: false };
|
return { configured: false };
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const conversations = await nextcloudService.getAllConversations(creds.username, creds.appPassword);
|
const conversations = await nextcloudService.getAllConversations(creds.username, creds.appPassword);
|
||||||
return {
|
const result: RoomsResult = {
|
||||||
configured: true,
|
configured: true,
|
||||||
data: conversations.map(c => ({
|
data: conversations.map(c => ({
|
||||||
token: c.token,
|
token: c.token,
|
||||||
@@ -324,10 +329,12 @@ async function getRooms(): Promise<RoomsResult> {
|
|||||||
type: c.type,
|
type: c.type,
|
||||||
})),
|
})),
|
||||||
};
|
};
|
||||||
|
roomsCache = { result, expiresAt: Date.now() + 60_000 };
|
||||||
|
return result;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
const msg = error instanceof Error ? error.message : String(error);
|
const msg = error instanceof Error ? error.message : String(error);
|
||||||
logger.error('scheduledMessages.getRooms failed', { error: msg });
|
logger.error('scheduledMessages.getRooms failed', { error: msg });
|
||||||
return { configured: true, data: [], error: msg };
|
return { configured: true, data: [], error: 'Verbindung zu Nextcloud fehlgeschlagen' };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user