From f88cd708087345d52e41870176f2e2504bf006d1 Mon Sep 17 00:00:00 2001 From: Razze Date: Sat, 1 Feb 2025 01:00:38 +0100 Subject: [PATCH] Fix exclude filter not working and misleading name --- backend/app/app.py | 8 ++--- backend/app/search.py | 35 ++++++++++++------- .../getCategoryCategoryCategoryGetParams.ts | 2 +- ...tegorySubcategoriesSubcategoryGetParams.ts | 2 +- frontend/src/env.ts | 10 ++++++ frontend/src/fetchers.ts | 15 ++++++-- 6 files changed, 52 insertions(+), 20 deletions(-) diff --git a/backend/app/app.py b/backend/app/app.py index 6b83c0771..bae39f800 100644 --- a/backend/app/app.py +++ b/backend/app/app.py @@ -25,7 +25,7 @@ def get_categories() -> list[str]: @router.get("/category/{category}", tags=["app"]) def get_category( category: schemas.MainCategory, - filter_subcategories: list[str] = Query(None), + exclude_subcategories: list[str] = Query(None), page: int | None = None, per_page: int | None = None, locale: str = "en", @@ -38,7 +38,7 @@ def get_category( return response result = search.get_by_selected_categories( - [category], filter_subcategories, page, per_page, locale + [category], exclude_subcategories, page, per_page, locale ) return result @@ -48,7 +48,7 @@ def get_category( def get_subcategory( category: schemas.MainCategory, subcategory: str, - filter_subcategories: list[str] = Query(None), + exclude_subcategories: list[str] = Query(None), page: int | None = None, per_page: int | None = None, locale: str = "en", @@ -61,7 +61,7 @@ def get_subcategory( return response result = search.get_by_selected_category_and_subcategory( - category, subcategory, filter_subcategories, page, per_page, locale + category, subcategory, exclude_subcategories, page, per_page, locale ) return result diff --git a/backend/app/search.py b/backend/app/search.py index 1665278dd..27f3d6e66 100644 --- a/backend/app/search.py +++ b/backend/app/search.py @@ -115,7 +115,7 @@ def delete_apps(app_id_list): def get_by_selected_categories( selected_categories: list[schemas.MainCategory], - filter_subcategories: list[str], + exclude_subcategories: list[str], page: int | None, hits_per_page: int | None, locale: str, @@ -124,6 +124,15 @@ def get_by_selected_categories( f"categories = {category.value}" for category in selected_categories ] + exclude_subcategories_list = ( + [ + f"sub_categories NOT IN [{exclude_subcategory}]" + for exclude_subcategory in exclude_subcategories + ] + if exclude_subcategories + else [] + ) + return _translate_name_and_summary( locale, client.index("apps").search( @@ -131,11 +140,7 @@ def get_by_selected_categories( { "filter": [ category_list, - ( - f"sub_categories NOT IN {filter_subcategories}" - if filter_subcategories is not None - else "" - ), + exclude_subcategories_list, "type IN [console-application, desktop-application]", "NOT icon IS NULL", ], @@ -150,11 +155,21 @@ def get_by_selected_categories( def get_by_selected_category_and_subcategory( selected_category: schemas.MainCategory, selected_subcategory: str, - filter_subcategories: list[str], + exclude_subcategories: list[str], page: int | None, hits_per_page: int | None, locale: str, ): + exclude_subcategories_list = ( + [ + f"sub_categories NOT IN [{exclude_subcategory}]" + for exclude_subcategory in exclude_subcategories + if exclude_subcategory is not None + ] + if exclude_subcategories + else [] + ) + return _translate_name_and_summary( locale, client.index("apps").search( @@ -163,11 +178,7 @@ def get_by_selected_category_and_subcategory( "filter": [ f"main_categories = {selected_category.value}", f"sub_categories = {selected_subcategory}", - ( - f"sub_categories NOT IN {filter_subcategories}" - if filter_subcategories is not None - else "" - ), + exclude_subcategories_list, "type IN [console-application, desktop-application]", "NOT icon IS NULL", ], diff --git a/frontend/src/codegen/model/getCategoryCategoryCategoryGetParams.ts b/frontend/src/codegen/model/getCategoryCategoryCategoryGetParams.ts index 5132e77e6..66bd74bf5 100644 --- a/frontend/src/codegen/model/getCategoryCategoryCategoryGetParams.ts +++ b/frontend/src/codegen/model/getCategoryCategoryCategoryGetParams.ts @@ -6,7 +6,7 @@ */ export type GetCategoryCategoryCategoryGetParams = { - filter_subcategories?: string[] + exclude_subcategories?: string[] page?: number | null per_page?: number | null locale?: string diff --git a/frontend/src/codegen/model/getSubcategoryCategoryCategorySubcategoriesSubcategoryGetParams.ts b/frontend/src/codegen/model/getSubcategoryCategoryCategorySubcategoriesSubcategoryGetParams.ts index 23788a43e..8309519b8 100644 --- a/frontend/src/codegen/model/getSubcategoryCategoryCategorySubcategoriesSubcategoryGetParams.ts +++ b/frontend/src/codegen/model/getSubcategoryCategoryCategorySubcategoriesSubcategoryGetParams.ts @@ -6,7 +6,7 @@ */ export type GetSubcategoryCategoryCategorySubcategoriesSubcategoryGetParams = { - filter_subcategories?: string[] + exclude_subcategories?: string[] page?: number | null per_page?: number | null locale?: string diff --git a/frontend/src/env.ts b/frontend/src/env.ts index 5faf46b8d..12926b3de 100644 --- a/frontend/src/env.ts +++ b/frontend/src/env.ts @@ -144,6 +144,7 @@ export const CATEGORY_URL = ( page?: number, per_page?: number, locale?: string, + exclude_subcategories?: string[], ): string => { const result = new URLSearchParams() @@ -158,6 +159,10 @@ export const CATEGORY_URL = ( if (locale) { result.append("locale", locale) } + + if (exclude_subcategories) { + result.append("exclude_subcategories", exclude_subcategories.join(",")) + } return `${BASE_URI}/category/${category}?${result.toString()}` } @@ -167,6 +172,7 @@ export const SUBCATEGORY_URL = ( page?: number, per_page?: number, locale?: string, + exclude_subcategories?: string[], ): string => { const result = new URLSearchParams() @@ -181,6 +187,10 @@ export const SUBCATEGORY_URL = ( if (locale) { result.append("locale", locale) } + + if (exclude_subcategories) { + result.append("exclude_subcategories", exclude_subcategories.join(",")) + } return `${BASE_URI}/category/${category}/subcategories/${subcategory}?${result.toString()}` } diff --git a/frontend/src/fetchers.ts b/frontend/src/fetchers.ts index c6565ef9b..c33edea6b 100644 --- a/frontend/src/fetchers.ts +++ b/frontend/src/fetchers.ts @@ -167,8 +167,11 @@ export async function fetchCategory( locale: string, page?: number, per_page?: number, + exclude_subcategories?: string[], ): Promise> { - const appListRes = await fetch(CATEGORY_URL(category, page, per_page, locale)) + const appListRes = await fetch( + CATEGORY_URL(category, page, per_page, locale, exclude_subcategories), + ) const response: MeilisearchResponse = await appListRes.json() console.log( @@ -184,9 +187,17 @@ export async function fetchSubcategory( locale: string, page?: number, per_page?: number, + exclude_subcategories?: string[], ): Promise> { const appListRes = await fetch( - SUBCATEGORY_URL(category, subcategory, page, per_page, locale), + SUBCATEGORY_URL( + category, + subcategory, + page, + per_page, + locale, + exclude_subcategories, + ), ) const response: MeilisearchResponse = await appListRes.json()