diff --git a/backend/endpoints/rom.py b/backend/endpoints/rom.py index 9acb39496..2975f373e 100644 --- a/backend/endpoints/rom.py +++ b/backend/endpoints/rom.py @@ -267,7 +267,6 @@ def get_roms( " returned. Maximum 50 values allowed." ), alias="genre", - max_length=50, ), ] = None, franchises: Annotated[ @@ -279,7 +278,6 @@ def get_roms( " be returned. Maximum 50 values allowed." ), alias="franchise", - max_length=50, ), ] = None, collections: Annotated[ @@ -291,7 +289,6 @@ def get_roms( " values will be returned. Maximum 50 values allowed." ), alias="collection", - max_length=50, ), ] = None, companies: Annotated[ @@ -303,7 +300,6 @@ def get_roms( " be returned. Maximum 50 values allowed." ), alias="company", - max_length=50, ), ] = None, age_ratings: Annotated[ @@ -315,7 +311,6 @@ def get_roms( " values will be returned. Maximum 20 values allowed." ), alias="age_rating", - max_length=20, ), ] = None, selected_status: Annotated[ @@ -331,7 +326,6 @@ def get_roms( " values will be returned. Maximum 30 values allowed." ), alias="region", - max_length=30, ), ] = None, languages: Annotated[ @@ -343,7 +337,6 @@ def get_roms( " values will be returned. Maximum 30 values allowed." ), alias="language", - max_length=30, ), ] = None, order_by: Annotated[ @@ -359,49 +352,42 @@ def get_roms( str, Query( description="Logic operator for genres filter: 'any' (OR) or 'all' (AND).", - alias="genres_logic", ), ] = "any", franchises_logic: Annotated[ str, Query( description="Logic operator for franchises filter: 'any' (OR) or 'all' (AND).", - alias="franchises_logic", ), ] = "any", collections_logic: Annotated[ str, Query( description="Logic operator for collections filter: 'any' (OR) or 'all' (AND).", - alias="collections_logic", ), ] = "any", companies_logic: Annotated[ str, Query( description="Logic operator for companies filter: 'any' (OR) or 'all' (AND).", - alias="companies_logic", ), ] = "any", age_ratings_logic: Annotated[ str, Query( description="Logic operator for age ratings filter: 'any' (OR) or 'all' (AND).", - alias="age_ratings_logic", ), ] = "any", regions_logic: Annotated[ str, Query( description="Logic operator for regions filter: 'any' (OR) or 'all' (AND).", - alias="regions_logic", ), ] = "any", languages_logic: Annotated[ str, Query( description="Logic operator for languages filter: 'any' (OR) or 'all' (AND).", - alias="languages_logic", ), ] = "any", ) -> CustomLimitOffsetPage[SimpleRomSchema]: diff --git a/backend/handler/database/roms_handler.py b/backend/handler/database/roms_handler.py index 54894ecf3..44567a30d 100644 --- a/backend/handler/database/roms_handler.py +++ b/backend/handler/database/roms_handler.py @@ -239,7 +239,11 @@ class DBRomsHandler(DBBaseHandler): ) def filter_by_matched(self, query: Query, value: bool) -> Query: - """Filter based on whether the rom is matched to a metadata provider.""" + """Filter based on whether the rom is matched to a metadata provider. + + Args: + value: True for matched ROMs, False for unmatched ROMs + """ predicate = or_( Rom.igdb_id.isnot(None), Rom.moby_id.isnot(None), diff --git a/frontend/src/components/Gallery/AppBar/common/FilterDrawer/Base.vue b/frontend/src/components/Gallery/AppBar/common/FilterDrawer/Base.vue index ce67d3b2a..42124f386 100644 --- a/frontend/src/components/Gallery/AppBar/common/FilterDrawer/Base.vue +++ b/frontend/src/components/Gallery/AppBar/common/FilterDrawer/Base.vue @@ -99,42 +99,46 @@ const onFilterChange = debounce( search: searchTerm.value, matched: filterMatched.value === true - ? "1" + ? "true" : filterUnmatched.value === true - ? "2" + ? "false" : null, filterFavorites: filterFavorites.value === true - ? "1" + ? "true" : filterFavorites.value === false - ? "0" + ? "false" : null, filterDuplicates: filterDuplicates.value === true - ? "1" + ? "true" : filterDuplicates.value === false - ? "0" + ? "false" : null, filterPlayables: filterPlayables.value === true - ? "1" + ? "true" : filterPlayables.value === false - ? "0" + ? "false" : null, filterMissing: filterMissing.value === true - ? "1" + ? "true" : filterMissing.value === false - ? "0" + ? "false" : null, filterVerified: filterVerified.value === true - ? "1" + ? "true" : filterVerified.value === false - ? "0" + ? "false" : null, filterRA: - filterRA.value === true ? "1" : filterRA.value === false ? "0" : null, + filterRA.value === true + ? "true" + : filterRA.value === false + ? "false" + : null, platforms: selectedPlatforms.value.length > 0 ? selectedPlatforms.value.map((p) => String(p.id)).join(",") @@ -313,7 +317,6 @@ async function fetchSearchFilteredRoms() { orderBy: romsStore.orderBy, orderDir: romsStore.orderDir, // Exclude all other filters - filterUnmatched: false, filterMatched: false, filterFavorites: null, filterDuplicates: null, @@ -436,62 +439,54 @@ onMounted(async () => { // Check for query params to set filters if (urlMatched !== undefined) { - if (urlMatched === "1") { + if (urlMatched) { galleryFilterStore.setFilterMatched(true); - } else if (urlMatched === "2") { - galleryFilterStore.setFilterUnmatched(true); + } else { + galleryFilterStore.setFilterMatched(false); } - // urlMatched === "0" or any other value means no filter (both remain null) + // Any other value means no filter (both remain null) } if (urlFilteredFavorites !== undefined) { - galleryFilterStore.setFilterFavorites( - urlFilteredFavorites === "1" - ? true - : urlFilteredFavorites === "0" - ? false - : null, - ); + if (urlFilteredFavorites) { + galleryFilterStore.setFilterFavorites(true); + } else { + galleryFilterStore.setFilterFavorites(false); + } } if (urlFilteredDuplicates !== undefined) { - galleryFilterStore.setFilterDuplicates( - urlFilteredDuplicates === "1" - ? true - : urlFilteredDuplicates === "0" - ? false - : null, - ); + if (urlFilteredDuplicates) { + galleryFilterStore.setFilterDuplicates(true); + } else { + galleryFilterStore.setFilterDuplicates(false); + } } if (urlFilteredPlayables !== undefined) { - galleryFilterStore.setFilterPlayables( - urlFilteredPlayables === "1" - ? true - : urlFilteredPlayables === "0" - ? false - : null, - ); + if (urlFilteredPlayables) { + galleryFilterStore.setFilterPlayables(true); + } else { + galleryFilterStore.setFilterPlayables(false); + } } if (urlFilteredMissing !== undefined) { - galleryFilterStore.setFilterMissing( - urlFilteredMissing === "1" - ? true - : urlFilteredMissing === "0" - ? false - : null, - ); + if (urlFilteredMissing) { + galleryFilterStore.setFilterMissing(true); + } else { + galleryFilterStore.setFilterMissing(false); + } } if (urlFilteredVerified !== undefined) { - galleryFilterStore.setFilterVerified( - urlFilteredVerified === "1" - ? true - : urlFilteredVerified === "0" - ? false - : null, - ); + if (urlFilteredVerified) { + galleryFilterStore.setFilterVerified(true); + } else { + galleryFilterStore.setFilterVerified(false); + } } if (urlFilteredRa !== undefined) { - galleryFilterStore.setFilterRA( - urlFilteredRa === "1" ? true : urlFilteredRa === "0" ? false : null, - ); + if (urlFilteredRa) { + galleryFilterStore.setFilterRA(true); + } else { + galleryFilterStore.setFilterRA(false); + } } // Check for query params to set multi-value filters (prioritize over single values) if (urlPlatforms !== undefined) {