v1.7.4: Suche in Listenansicht (Bemerkungen, Objekte, BEOs)
Suchfeld in der Toolbar der Listenansicht: Suche über alle Einträge der Kuppel in Bemerkungen, Objekte und BEOs. Monatsauswahl, Suchfeld und Drucken-Button in einer Zeile; Monatsauswahl wird bei aktiver Suche unsichtbar aber platzhaltend ausgeblendet. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -33,6 +33,37 @@ export async function GET(request: NextRequest) {
|
||||
const month = searchParams.get('month') || '';
|
||||
const order = searchParams.get('order') === 'asc' ? 'ASC' : 'DESC';
|
||||
|
||||
const search = (searchParams.get('search') || '').trim();
|
||||
|
||||
if (search) {
|
||||
const pattern = '%' + search + '%';
|
||||
const searchParams2 = [kuppel, pattern, pattern, pattern];
|
||||
const countSQL =
|
||||
'SELECT COUNT(*) AS total FROM (' +
|
||||
'SELECT l.ID FROM logbuch l' +
|
||||
' LEFT JOIN logbuch_beos lb ON lb.LogbuchID = l.ID' +
|
||||
' LEFT JOIN (SELECT id, `kürzel` AS kuerzel FROM beos) bk ON bk.id = lb.BeoID' +
|
||||
' LEFT JOIN logbuch_objekte lo ON lo.LogbuchID = l.ID' +
|
||||
' LEFT JOIN objekte o ON o.ID = lo.ObjektID' +
|
||||
' WHERE l.Kuppel = ?' +
|
||||
' GROUP BY l.ID' +
|
||||
" HAVING (MAX(l.Bemerkungen) LIKE ? OR GROUP_CONCAT(DISTINCT bk.kuerzel ORDER BY bk.kuerzel SEPARATOR ', ') LIKE ? OR GROUP_CONCAT(DISTINCT o.Name ORDER BY o.Name SEPARATOR ', ') LIKE ?)" +
|
||||
') AS sub';
|
||||
const listSQL = LIST_SQL +
|
||||
' HAVING (MAX(l.Bemerkungen) LIKE ? OR BEOs LIKE ? OR Objekte LIKE ?)' +
|
||||
` ORDER BY l.Beginn DESC LIMIT ${limit} OFFSET ${offset}`;
|
||||
try {
|
||||
const [countRows, entries] = await Promise.all([
|
||||
query(countSQL, searchParams2) as Promise<{ total: number }[]>,
|
||||
query(listSQL, searchParams2),
|
||||
]);
|
||||
return NextResponse.json({ entries, total: (countRows as unknown as { total: number }[])[0]?.total ?? 0 });
|
||||
} catch (error) {
|
||||
console.error('GET /api/logbuch (search):', error);
|
||||
return NextResponse.json({ error: 'Datenbankfehler' }, { status: 500 });
|
||||
}
|
||||
}
|
||||
|
||||
let listWhere = 'WHERE l.Kuppel = ?';
|
||||
let countWhere = 'WHERE Kuppel = ?';
|
||||
let params: (string | number | null)[] = [kuppel];
|
||||
|
||||
Reference in New Issue
Block a user