fix(console): deduplicate models and engines in vehicle navigation

Models and engines tables have many duplicate names (e.g. 24 ASTRA rows,
210 F-150 rows, 398 "5.7L 350CID V8" rows). Changed get_models() and
get_engines() to use GROUP BY UPPER(name) instead of DISTINCT on id+name
so each model/engine appears only once in the navigation lists.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-15 02:12:36 +00:00
parent 4af3a09b03
commit 5444cf660a

View File

@@ -67,16 +67,17 @@ class Database:
if brand: if brand:
return self._query( return self._query(
""" """
SELECT DISTINCT m.id, m.name SELECT MIN(m.id) AS id, m.name
FROM models m FROM models m
JOIN brands b ON m.brand_id = b.id JOIN brands b ON m.brand_id = b.id
WHERE UPPER(b.name) = UPPER(?) WHERE UPPER(b.name) = UPPER(?)
GROUP BY UPPER(m.name)
ORDER BY m.name ORDER BY m.name
""", """,
(brand,), (brand,),
) )
return self._query( return self._query(
"SELECT id, name FROM models ORDER BY name" "SELECT MIN(id) AS id, name FROM models GROUP BY UPPER(name) ORDER BY name"
) )
def get_years( def get_years(
@@ -109,8 +110,13 @@ class Database:
) -> list[dict]: ) -> list[dict]:
"""Return engines, optionally filtered by brand/model/year.""" """Return engines, optionally filtered by brand/model/year."""
sql = """ sql = """
SELECT DISTINCT e.id, e.name, e.displacement_cc, e.cylinders, SELECT MIN(e.id) AS id, e.name,
e.fuel_type, e.power_hp, e.torque_nm, e.engine_code MAX(e.displacement_cc) AS displacement_cc,
MAX(e.cylinders) AS cylinders,
MAX(e.fuel_type) AS fuel_type,
MAX(e.power_hp) AS power_hp,
MAX(e.torque_nm) AS torque_nm,
MAX(e.engine_code) AS engine_code
FROM engines e FROM engines e
JOIN model_year_engine mye ON e.id = mye.engine_id JOIN model_year_engine mye ON e.id = mye.engine_id
JOIN models m ON mye.model_id = m.id JOIN models m ON mye.model_id = m.id
@@ -128,7 +134,7 @@ class Database:
if year: if year:
sql += " AND y.year = ?" sql += " AND y.year = ?"
params.append(int(year)) params.append(int(year))
sql += " ORDER BY e.name" sql += " GROUP BY UPPER(e.name) ORDER BY e.name"
return self._query(sql, tuple(params)) return self._query(sql, tuple(params))
def get_model_year_engine( def get_model_year_engine(