Refactor: remove max_length constraints from query parameters and update boolean filter values to use true/false strings

This commit is contained in:
zurdi
2025-11-28 19:04:29 +00:00
parent 92cb643405
commit b2a571068b
3 changed files with 56 additions and 71 deletions

View File

@@ -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]:

View File

@@ -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),

View File

@@ -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) {