Add filter values to roms query

This commit is contained in:
Georges-Antoine Assi
2026-01-15 11:51:59 -05:00
parent 96240a86e9
commit 81b9eff8c7
7 changed files with 122 additions and 15 deletions

View File

@@ -1273,3 +1273,58 @@ class DBRomsHandler(DBBaseHandler):
"regions": sorted(regions),
"languages": sorted(languages),
}
@begin_session
def with_filter_values(
self,
query: Query,
session: Session = None, # type: ignore
) -> dict:
ids_subq = query.with_only_columns(Rom.id).scalar_subquery() # type: ignore
statement = (
select(
RomMetadata.genres,
RomMetadata.franchises,
RomMetadata.companies,
RomMetadata.game_modes,
RomMetadata.age_ratings,
RomMetadata.player_count,
Rom.regions,
Rom.languages,
)
.select_from(Rom)
.join(RomMetadata, Rom.id == RomMetadata.rom_id)
.where(Rom.id.in_(ids_subq))
)
genres = set()
franchises = set()
companies = set()
game_modes = set()
age_ratings = set()
player_counts = set()
regions = set()
languages = set()
for row in session.execute(statement):
g, f, c, gm, ar, pc, rg, lg = row
genres.update(g)
franchises.update(f)
companies.update(c)
game_modes.update(gm)
age_ratings.update(ar)
player_counts.update(pc)
regions.update(rg)
languages.update(lg)
return {
"genres": sorted(genres),
"franchises": sorted(franchises),
"companies": sorted(companies),
"game_modes": sorted(game_modes),
"age_ratings": sorted(age_ratings),
"player_counts": sorted(player_counts),
"regions": sorted(regions),
"languages": sorted(languages),
}