Files
dashboard/backend/src/controllers/bookstack.controller.ts
2026-03-12 08:16:34 +01:00

64 lines
2.4 KiB
TypeScript

import { Request, Response } from 'express';
import bookstackService from '../services/bookstack.service';
import environment from '../config/environment';
import logger from '../utils/logger';
class BookStackController {
async getRecent(_req: Request, res: Response): Promise<void> {
if (!environment.bookstack.url) {
res.status(200).json({ success: true, data: [], configured: false });
return;
}
try {
const pages = await bookstackService.getRecentPages();
res.status(200).json({ success: true, data: pages, configured: true });
} catch (error) {
logger.error('BookStackController.getRecent error', { error });
res.status(500).json({ success: false, message: 'BookStack konnte nicht abgefragt werden' });
}
}
async search(req: Request, res: Response): Promise<void> {
if (!environment.bookstack.url) {
res.status(200).json({ success: true, data: [], configured: false });
return;
}
const query = req.query.query as string | undefined;
if (!query || query.trim().length === 0) {
res.status(400).json({ success: false, message: 'Suchbegriff fehlt' });
return;
}
if (query.trim().length > 500) {
res.status(400).json({ success: false, message: 'Suchanfrage zu lang' });
return;
}
try {
const results = await bookstackService.searchPages(query.trim());
res.status(200).json({ success: true, data: results, configured: true });
} catch (error) {
logger.error('BookStackController.search error', { error });
res.status(500).json({ success: false, message: 'BookStack-Suche fehlgeschlagen' });
}
}
async getPage(req: Request, res: Response): Promise<void> {
if (!environment.bookstack.url) {
res.status(200).json({ success: true, data: null, configured: false });
return;
}
const id = parseInt(String(req.params.id), 10);
if (isNaN(id) || id <= 0) {
res.status(400).json({ success: false, message: 'Ungültige Seiten-ID' });
return;
}
try {
const page = await bookstackService.getPageById(id);
res.status(200).json({ success: true, data: page, configured: true });
} catch (error) {
logger.error('BookStackController.getPage error', { error });
res.status(500).json({ success: false, message: 'BookStack-Seite konnte nicht geladen werden' });
}
}
}
export default new BookStackController();