From 144457b9f0b39508474ab6939fcb8025dafd2e9a Mon Sep 17 00:00:00 2001 From: Florian Wilde Date: Thu, 10 Sep 2026 16:33:33 +0200 Subject: [PATCH] fix(aufgaben): Ideen aus Aufgabenliste und Inbox heraushalten MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der Fehler fiel erst in den aufgenommenen Bildern auf: Ideen standen mitten in der Aufgabenliste, obwohl der ganze Sinn der getrennten Ideenseite ist, dass sie das nicht tun. Ohne Termin hätten sie dort entweder unsichtbar unten gestanden oder mit erfundenem Termin oben. Der Filter kennt jetzt ohneIdeen; ein ausdrücklich gewählter Typ gewinnt, wer nach Ideen filtert, sieht sie also weiterhin. Die Startseite filterte Ideen bisher von Hand nach dem Laden — das erledigt jetzt dieselbe Abfrage wie überall sonst. Ein E2E-Test hält den Fall fest. Co-Authored-By: Claude Opus 5 (1M context) --- e2e/aufgaben.spec.ts | 28 ++++++++++++++++++++++++++++ src/app/(app)/aufgaben/page.tsx | 2 ++ src/app/(app)/inbox/page.tsx | 2 +- src/app/(app)/page.tsx | 12 ++++-------- src/server/abfragen/aufgaben.ts | 10 ++++++++++ 5 files changed, 45 insertions(+), 9 deletions(-) diff --git a/e2e/aufgaben.spec.ts b/e2e/aufgaben.spec.ts index d818985..75c6324 100644 --- a/e2e/aufgaben.spec.ts +++ b/e2e/aufgaben.spec.ts @@ -107,6 +107,34 @@ test.describe('Aufgaben', () => { await expect(page.locator('li').filter({ hasText: titel })).toHaveCount(0) }) + test('hält Ideen aus der Aufgabenliste heraus', async ({ page }) => { + const idee = `${PRAEFIX} Nur eine Idee` + const aufgabe = `${PRAEFIX} Eine echte Aufgabe` + await db.aufgabe.createMany({ + data: [ + { titel: idee, typ: 'IDEE' }, + { titel: aufgabe, typ: 'AUFGABE' }, + ], + }) + + await anmelden(page) + + // In der Aufgabenliste hat die Idee nichts zu suchen. + await page.goto('/aufgaben') + await expect(page.locator('li').filter({ hasText: aufgabe })).toBeVisible() + await expect(page.locator('li').filter({ hasText: idee })).toHaveCount(0) + + // Auch nicht in der Inbox, obwohl beide keinen Bereich haben. + await page.goto('/inbox') + await expect(page.locator('li').filter({ hasText: aufgabe })).toBeVisible() + await expect(page.locator('li').filter({ hasText: idee })).toHaveCount(0) + + // Wer ausdrücklich danach filtert, sieht sie sehr wohl. + await page.goto('/aufgaben?typ=IDEE') + await expect(page.locator('li').filter({ hasText: idee })).toBeVisible() + await expect(page.locator('li').filter({ hasText: aufgabe })).toHaveCount(0) + }) + test('filtert nach Bereich und über die Adresszeile', async ({ page }) => { await anmelden(page) const bereich = await db.bereich.findFirst({ diff --git a/src/app/(app)/aufgaben/page.tsx b/src/app/(app)/aufgaben/page.tsx index c23f478..ee47777 100644 --- a/src/app/(app)/aufgaben/page.tsx +++ b/src/app/(app)/aufgaben/page.tsx @@ -56,6 +56,8 @@ function filterAus( : { nurOffen: true }), ...(typ && TYP_WERTE.includes(typ) ? { typ: typ as AufgabenTyp } : {}), ...(einer('suche') ? { suche: einer('suche') } : {}), + // Ideen haben ihre eigene Seite; wer sie hier sehen will, filtert danach. + ohneIdeen: true, } } diff --git a/src/app/(app)/inbox/page.tsx b/src/app/(app)/inbox/page.tsx index 1706b8c..f7954c7 100644 --- a/src/app/(app)/inbox/page.tsx +++ b/src/app/(app)/inbox/page.tsx @@ -22,7 +22,7 @@ export default async function InboxSeite() { await verlangeAnmeldung('/inbox') const [aufgaben, bereiche, projekte] = await Promise.all([ - aufgabenLaden({ nurInbox: true, nurOffen: true }), + aufgabenLaden({ nurInbox: true, nurOffen: true, ohneIdeen: true }), bereicheLaden(), projekteZurAuswahlLaden(), ]) diff --git a/src/app/(app)/page.tsx b/src/app/(app)/page.tsx index 87d3385..164dcd7 100644 --- a/src/app/(app)/page.tsx +++ b/src/app/(app)/page.tsx @@ -25,7 +25,7 @@ export default async function StartSeite() { const heute = jetzt() const [alleOffenen, bereiche, projekte, zahlen, bereichsListe] = await Promise.all([ - aufgabenLaden({ nurOffen: true }, 200), + aufgabenLaden({ nurOffen: true, ohneIdeen: true }, 200), bereicheLaden(), projekteZurAuswahlLaden(), zaehlstaende(), @@ -35,11 +35,9 @@ export default async function StartSeite() { }), ]) - // Was jetzt zählt: überfällig, heute oder morgen fällig. Ideen bleiben draußen. + // Was jetzt zählt: überfällig, heute oder morgen fällig. const dran = alleOffenen.filter( - (a) => - a.typ !== 'IDEE' && - (a.ueberfaellig || a.faelligkeit === 'heute' || a.faelligkeit === 'morgen'), + (a) => a.ueberfaellig || a.faelligkeit === 'heute' || a.faelligkeit === 'morgen', ) const anrede = benutzer.name?.split(' ')[0] ?? benutzer.email @@ -109,9 +107,7 @@ export default async function StartSeite() { ) : (