From 4733a86302da8565d92ce026aa399b0bf3f78452 Mon Sep 17 00:00:00 2001 From: Georges-Antoine Assi Date: Sat, 7 Feb 2026 15:44:03 -0500 Subject: [PATCH] [ROMM-2983] Fix negative filter by verified --- backend/handler/database/roms_handler.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/backend/handler/database/roms_handler.py b/backend/handler/database/roms_handler.py index bbf2b5832..9d03392f3 100644 --- a/backend/handler/database/roms_handler.py +++ b/backend/handler/database/roms_handler.py @@ -330,7 +330,7 @@ class DBRomsHandler(DBBaseHandler): predicate = not_(predicate) return query.filter(predicate) - def _filter_by_verified(self, query: Query): + def _filter_by_verified(self, query: Query, value: bool) -> Query: keys_to_check = [ "tosec_match", "mame_arcade_match", @@ -347,11 +347,17 @@ class DBRomsHandler(DBBaseHandler): conditions = " OR ".join( f"(hasheous_metadata->>'{key}')::boolean" for key in keys_to_check ) - return query.filter(text(conditions)) + predicate = text(f"({conditions})") + if not value: + predicate = text(f"NOT ({conditions})") + return query.filter(predicate) else: - return query.filter( - or_(*(Rom.hasheous_metadata[key].as_boolean() for key in keys_to_check)) + predicate = or_( + *(Rom.hasheous_metadata[key].as_boolean() for key in keys_to_check) ) + if not value: + predicate = not_(predicate) + return query.filter(predicate) def _filter_by_genres( self, @@ -587,9 +593,8 @@ class DBRomsHandler(DBBaseHandler): if missing is not None: query = self._filter_by_missing_from_fs(query, value=missing) - # TODO: Correctly support true/false values. - if verified: - query = self._filter_by_verified(query) + if verified is not None: + query = self._filter_by_verified(query, value=verified) if updated_after: query = query.filter(Rom.updated_at > updated_after)