Aktivitaeten: eigene Seite mit Pagination, kaputte Eintragslinks repariert
Der Link unter "Letzte Aktivitaeten" heisst jetzt "Alle" und fuehrt auf /aktivitaeten - den vollstaendigen Verlauf ueber alle Bewerbungen, 25 Eintraege je Seite. Die Blaetterleiste sind echte Links (kein JS), damit Zurueck-Taste, Lesezeichen und Neuer-Tab funktionieren; eine Seitenzahl ausserhalb des Bereichs wird auf den gueltigen Rand geklemmt statt eine leere Seite zu zeigen. Dabei ein Fehler von mir aus dem letzten Commit behoben: Ich hatte den Tag-Namen samt href per <%= %> zusammengesetzt, was die Anfuehrungszeichen escaped - heraus kam href=""/bewerbung/121"" und damit die URL /%22/bewerbung/121%22. Jetzt zwei ausgeschriebene Zweige (Link bzw. Block). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1710,6 +1710,46 @@ initializeDatabase().then(async () => {
|
||||
}
|
||||
});
|
||||
|
||||
// Alle Aktivitäten (Statusänderungen), seitenweise. Die Startseite zeigt nur die
|
||||
// jüngsten acht — hier steht der vollständige Verlauf über alle Bewerbungen.
|
||||
const AKTIVITAETEN_PRO_SEITE = 25;
|
||||
|
||||
app.get('/aktivitaeten', async (req, res) => {
|
||||
try {
|
||||
const U = uid();
|
||||
const gesamtRow = await dbGet('SELECT COUNT(*) AS anzahl FROM status_verlauf WHERE user_id = ?', [U]);
|
||||
const gesamt = gesamtRow ? gesamtRow.anzahl : 0;
|
||||
const seiten = Math.max(1, Math.ceil(gesamt / AKTIVITAETEN_PRO_SEITE));
|
||||
|
||||
// Eine Seite außerhalb des Bereichs (getippt oder nach dem Löschen von
|
||||
// Einträgen) klemmen wir auf den gültigen Rand, statt eine leere Seite zu zeigen.
|
||||
const gewuenscht = parseInt(req.query.seite, 10);
|
||||
const seite = Math.min(Math.max(Number.isInteger(gewuenscht) ? gewuenscht : 1, 1), seiten);
|
||||
|
||||
const aktivitaet = await dbAll(`
|
||||
SELECT sv.datum, sv.status, sv.kommentar,
|
||||
b.id AS bewerbung_id, b.firma, b.stelle
|
||||
FROM status_verlauf sv
|
||||
LEFT JOIN bewerbungen b ON b.id = sv.bewerbung_id AND b.user_id = sv.user_id
|
||||
WHERE sv.user_id = ?
|
||||
ORDER BY datetime(sv.created_at) DESC, sv.id DESC
|
||||
LIMIT ? OFFSET ?
|
||||
`, [U, AKTIVITAETEN_PRO_SEITE, (seite - 1) * AKTIVITAETEN_PRO_SEITE]);
|
||||
|
||||
res.render('aktivitaeten', {
|
||||
aktivitaet,
|
||||
gesamt,
|
||||
seite,
|
||||
seiten,
|
||||
proSeite: AKTIVITAETEN_PRO_SEITE,
|
||||
hideSettings: false,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error loading aktivitaeten:', error);
|
||||
res.status(500).send('Serverfehler');
|
||||
}
|
||||
});
|
||||
|
||||
// Statistik — comprehensive, on its own page. The dashboard only carries a
|
||||
// quick glance now; everything that needs room to breathe lives here.
|
||||
app.get('/statistik', async (req, res) => {
|
||||
|
||||
Reference in New Issue
Block a user