feat: add logic operators for multi-value filters in collections and roms handlers

This commit is contained in:
zurdi
2025-12-24 15:23:44 +00:00
parent 415fb74bde
commit 48d6df9cc0
3 changed files with 51 additions and 7 deletions

View File

@@ -294,6 +294,14 @@ class DBCollectionsHandler(DBBaseHandler):
selected_status=criteria.get("selected_status"),
regions=regions,
languages=languages,
# Logic operators for multi-value filters
genres_logic=criteria.get("genres_logic", "any"),
franchises_logic=criteria.get("franchises_logic", "any"),
collections_logic=criteria.get("collections_logic", "any"),
companies_logic=criteria.get("companies_logic", "any"),
age_ratings_logic=criteria.get("age_ratings_logic", "any"),
regions_logic=criteria.get("regions_logic", "any"),
languages_logic=criteria.get("languages_logic", "any"),
user_id=user_id,
order_by=criteria.get("order_by", "name"),
order_dir=criteria.get("order_dir", "asc"),

View File

@@ -735,6 +735,14 @@ class DBRomsHandler(DBBaseHandler):
selected_status=kwargs.get("selected_status", None),
regions=kwargs.get("regions", None),
languages=kwargs.get("languages", None),
# Logic operators for multi-value filters
genres_logic=kwargs.get("genres_logic", "any"),
franchises_logic=kwargs.get("franchises_logic", "any"),
collections_logic=kwargs.get("collections_logic", "any"),
companies_logic=kwargs.get("companies_logic", "any"),
age_ratings_logic=kwargs.get("age_ratings_logic", "any"),
regions_logic=kwargs.get("regions_logic", "any"),
languages_logic=kwargs.get("languages_logic", "any"),
user_id=kwargs.get("user_id", None),
)
return session.scalars(roms).all()

View File

@@ -42,6 +42,13 @@ const {
selectedPlatforms,
selectedRegions,
selectedLanguages,
genresLogic,
franchisesLogic,
collectionsLogic,
companiesLogic,
ageRatingsLogic,
regionsLogic,
languagesLogic,
} = storeToRefs(galleryFilterStore);
const emitter = inject<Emitter<Events>>("emitter");
@@ -133,16 +140,31 @@ async function createSmartCollection() {
if (filterRA.value) filterCriteria.has_ra = true;
if (filterMissing.value) filterCriteria.missing = true;
if (filterVerified.value) filterCriteria.verified = true;
if (selectedGenres.value && selectedGenres.value.length > 0)
if (selectedGenres.value && selectedGenres.value.length > 0) {
filterCriteria.genres = selectedGenres.value;
if (selectedFranchises.value && selectedFranchises.value.length > 0)
if (selectedGenres.value.length > 1)
filterCriteria.genres_logic = genresLogic.value;
}
if (selectedFranchises.value && selectedFranchises.value.length > 0) {
filterCriteria.franchises = selectedFranchises.value;
if (selectedCollections.value && selectedCollections.value.length > 0)
if (selectedFranchises.value.length > 1)
filterCriteria.franchises_logic = franchisesLogic.value;
}
if (selectedCollections.value && selectedCollections.value.length > 0) {
filterCriteria.collections = selectedCollections.value;
if (selectedCompanies.value && selectedCompanies.value.length > 0)
if (selectedCollections.value.length > 1)
filterCriteria.collections_logic = collectionsLogic.value;
}
if (selectedCompanies.value && selectedCompanies.value.length > 0) {
filterCriteria.companies = selectedCompanies.value;
if (selectedAgeRatings.value && selectedAgeRatings.value.length > 0)
if (selectedCompanies.value.length > 1)
filterCriteria.companies_logic = companiesLogic.value;
}
if (selectedAgeRatings.value && selectedAgeRatings.value.length > 0) {
filterCriteria.age_ratings = selectedAgeRatings.value;
if (selectedAgeRatings.value.length > 1)
filterCriteria.age_ratings_logic = ageRatingsLogic.value;
}
if (selectedStatuses.value && selectedStatuses.value.length > 0) {
const statusKeys = selectedStatuses.value
.filter((s): s is string => s !== null)
@@ -152,10 +174,16 @@ async function createSmartCollection() {
filterCriteria.selected_status = statusKeys;
}
}
if (selectedRegions.value && selectedRegions.value.length > 0)
if (selectedRegions.value && selectedRegions.value.length > 0) {
filterCriteria.regions = selectedRegions.value;
if (selectedLanguages.value && selectedLanguages.value.length > 0)
if (selectedRegions.value.length > 1)
filterCriteria.regions_logic = regionsLogic.value;
}
if (selectedLanguages.value && selectedLanguages.value.length > 0) {
filterCriteria.languages = selectedLanguages.value;
if (selectedLanguages.value.length > 1)
filterCriteria.languages_logic = languagesLogic.value;
}
const { data } = await collectionApi.createSmartCollection({
smartCollection: {