From 490aa4d89c3854cbcabeeecae86f6325ebf889c6 Mon Sep 17 00:00:00 2001 From: Georges-Antoine Assi Date: Mon, 24 Mar 2025 19:30:19 -0400 Subject: [PATCH] filter out rows when order by columnis null --- .../versions/0037_virtual_rom_columns.py | 21 ++++++++++--------- backend/handler/database/roms_handler.py | 6 ++++-- backend/models/rom.py | 4 ---- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/backend/alembic/versions/0037_virtual_rom_columns.py b/backend/alembic/versions/0037_virtual_rom_columns.py index 946b45c06..b52ec1a7a 100644 --- a/backend/alembic/versions/0037_virtual_rom_columns.py +++ b/backend/alembic/versions/0037_virtual_rom_columns.py @@ -58,14 +58,12 @@ def upgrade(): ELSE '[]'::jsonb END AS game_modes, - ( - SELECT jsonb_agg(rating -> 'rating') - FROM jsonb_array_elements( - CASE WHEN r.igdb_metadata ? 'age_ratings' - THEN r.igdb_metadata -> 'age_ratings' - ELSE '[]'::jsonb - END - ) AS rating + COALESCE( + jsonb_path_query_array( + r.igdb_metadata, + '$.age_ratings[*].rating' + ), + '[]'::jsonb ) AS age_ratings, CASE @@ -161,9 +159,12 @@ def upgrade(): END AS game_modes, CASE - WHEN JSON_CONTAINS_PATH(r.igdb_metadata, 'one', '$.age_ratings') THEN + WHEN JSON_CONTAINS_PATH(r.igdb_metadata, 'one', '$.age_ratings') + AND JSON_LENGTH(JSON_EXTRACT(r.igdb_metadata, '$.age_ratings')) > 0 + THEN JSON_EXTRACT(r.igdb_metadata, '$.age_ratings[*].rating') - ELSE JSON_ARRAY() + ELSE + JSON_ARRAY() END AS age_ratings, CASE diff --git a/backend/handler/database/roms_handler.py b/backend/handler/database/roms_handler.py index 9bc1906cc..c11bd5282 100644 --- a/backend/handler/database/roms_handler.py +++ b/backend/handler/database/roms_handler.py @@ -384,11 +384,13 @@ class DBRomsHandler(DBBaseHandler): ) if user_id and hasattr(RomUser, order_by) and not hasattr(Rom, order_by): - query = query.filter(RomUser.user_id == user_id) order_attr = getattr(RomUser, order_by) + query = query.filter(RomUser.user_id == user_id, order_attr.isnot(None)) elif hasattr(RomMetadata, order_by) and not hasattr(Rom, order_by): - query = query.outerjoin(RomMetadata, RomMetadata.rom_id == Rom.id) order_attr = getattr(RomMetadata, order_by) + query = query.outerjoin(RomMetadata, RomMetadata.rom_id == Rom.id).filter( + order_attr.isnot(None) + ) elif hasattr(Rom, order_by): order_attr = getattr(Rom, order_by) else: diff --git a/backend/models/rom.py b/backend/models/rom.py index ab0f96865..08d6d4a2e 100644 --- a/backend/models/rom.py +++ b/backend/models/rom.py @@ -276,10 +276,6 @@ class Rom(BaseModel): or [] ) - @property - def first_release_date(self) -> int | None: - return self.metadatum.first_release_date - @property def is_unidentified(self) -> bool: return not self.igdb_id and not self.moby_id and not self.ss_id