From e65d1cfacd6ae1e13db7176518b1270ee62c91bd Mon Sep 17 00:00:00 2001 From: Christian Nennemann Date: Sat, 7 Mar 2026 21:06:26 +0100 Subject: [PATCH] Fix drafts search to include author names Clicking an author in the network graph opens /drafts?q=AuthorName but search only checked draft name/title/summary. Now also matches against author names via a JOIN on draft_authors + authors tables. Co-Authored-By: Claude Opus 4.6 --- src/webui/data.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/webui/data.py b/src/webui/data.py index 97875ae..d4dbd1c 100644 --- a/src/webui/data.py +++ b/src/webui/data.py @@ -74,6 +74,17 @@ def get_drafts_page( """ pairs = db.drafts_with_ratings(limit=1000) + # Build author lookup for search (draft_name -> "author1 author2 ...") + author_text_by_draft: dict[str, str] = {} + if search: + rows = db.conn.execute( + """SELECT da.draft_name, GROUP_CONCAT(a.name, ' ') as names + FROM draft_authors da JOIN authors a ON da.person_id = a.person_id + GROUP BY da.draft_name""" + ).fetchall() + for r in rows: + author_text_by_draft[r[0]] = r[1] or "" + # Filter filtered = [] for draft, rating in pairs: @@ -84,7 +95,8 @@ def get_drafts_page( if source and draft.source != source: continue if search: - haystack = f"{draft.name} {draft.title} {rating.summary}".lower() + author_names = author_text_by_draft.get(draft.name, "") + haystack = f"{draft.name} {draft.title} {rating.summary} {author_names}".lower() if not all(w in haystack for w in search.lower().split()): continue filtered.append((draft, rating))