diff --git a/app/main.py b/app/main.py index 679fa86..754398a 100644 --- a/app/main.py +++ b/app/main.py @@ -110,18 +110,25 @@ def normalize_url(url: str) -> str: return url -def facets(db: Session, user: User) -> dict: +# Sortierung der Kategorie-/Hersteller-Listen in der Seitenleiste. +FACET_SORT_OPTIONS = {"name": "Name A–Z", "count": "Anzahl"} +DEFAULT_FACET_SORT = "name" + + +def facets(db: Session, user: User, facet_sort: str = DEFAULT_FACET_SORT) -> dict: + cat_order = Link.category if facet_sort == "name" else func.count().desc() cat_rows = db.execute( select(Link.category, func.count()) .where(Link.user_id == user.id, Link.category != "") .group_by(Link.category) - .order_by(func.count().desc()) + .order_by(cat_order) ).all() + man_order = Link.manufacturer if facet_sort == "name" else func.count().desc() man_rows = db.execute( select(Link.manufacturer, func.count()) .where(Link.user_id == user.id, Link.manufacturer != "") .group_by(Link.manufacturer) - .order_by(func.count().desc()) + .order_by(man_order) ).all() review_count = db.scalar( select(func.count()) @@ -200,12 +207,13 @@ def query_links( return sort_links(matches, sort) -def prompt_facets(db: Session, user: User) -> dict: +def prompt_facets(db: Session, user: User, facet_sort: str = DEFAULT_FACET_SORT) -> dict: + cat_order = Prompt.category if facet_sort == "name" else func.count().desc() cat_rows = db.execute( select(Prompt.category, func.count()) .where(Prompt.user_id == user.id, Prompt.category != "") .group_by(Prompt.category) - .order_by(func.count().desc()) + .order_by(cat_order) ).all() return {"categories": [(name, count) for name, count in cat_rows]} @@ -343,6 +351,7 @@ def index( semantic: str = "", sort: str = DEFAULT_SORT, review: str = "", + facet_sort: str = DEFAULT_FACET_SORT, db: Session = Depends(get_db), ): user = current_user(request, db) @@ -351,6 +360,8 @@ def index( if sort not in SORT_OPTIONS: sort = DEFAULT_SORT + if facet_sort not in FACET_SORT_OPTIONS: + facet_sort = DEFAULT_FACET_SORT is_semantic = semantic in ("1", "on", "true") review_only = review in ("1", "on", "true") links = query_links( @@ -362,7 +373,7 @@ def index( "request": request, "user": user, "links": links, - "facets": facets(db, user), + "facets": facets(db, user, facet_sort), "q": q, "active_category": category, "active_manufacturer": manufacturer, @@ -371,6 +382,8 @@ def index( "sort": sort, "sort_options": SORT_OPTIONS, "review_only": review_only, + "facet_sort": facet_sort, + "facet_sort_options": FACET_SORT_OPTIONS, }, ) @@ -632,6 +645,7 @@ def prompts_index( q: str = "", category: str = "", sort: str = DEFAULT_SORT, + facet_sort: str = DEFAULT_FACET_SORT, db: Session = Depends(get_db), ): user = current_user(request, db) @@ -640,6 +654,8 @@ def prompts_index( if sort not in SORT_OPTIONS: sort = DEFAULT_SORT + if facet_sort not in FACET_SORT_OPTIONS: + facet_sort = DEFAULT_FACET_SORT prompts = query_prompts(db, user, q, category, sort) return templates.TemplateResponse( "prompts.html", @@ -647,12 +663,14 @@ def prompts_index( "request": request, "user": user, "prompts": prompts, - "facets": prompt_facets(db, user), + "facets": prompt_facets(db, user, facet_sort), "q": q, "active_category": category, "ai_enabled": config.AI_ENABLED, "sort": sort, "sort_options": SORT_OPTIONS, + "facet_sort": facet_sort, + "facet_sort_options": FACET_SORT_OPTIONS, }, ) diff --git a/app/templates/index.html b/app/templates/index.html index c464d9b..c220e88 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -7,14 +7,23 @@