diff --git a/pos/services/catalog_service.py b/pos/services/catalog_service.py index b5ed534..8a065e3 100644 --- a/pos/services/catalog_service.py +++ b/pos/services/catalog_service.py @@ -18,23 +18,13 @@ import re # ───────────────────────────────────────────────────────────────────────────── def get_brands(master_conn): - """Get all vehicle brands that have at least one part in the catalog. - - Uses EXISTS on model_year_engine + vehicle_parts to avoid scanning - vehicle_parts fully. The subquery stops at the first match per brand. - """ + """Get all vehicle brands that have MYE entries (fast, no vehicle_parts scan).""" cur = master_conn.cursor() cur.execute(""" SELECT DISTINCT b.id_brand, b.name_brand FROM brands b - WHERE EXISTS ( - SELECT 1 - FROM models m - JOIN model_year_engine mye ON mye.model_id = m.id_model - JOIN vehicle_parts vp ON vp.model_year_engine_id = mye.id_mye - WHERE m.brand_id = b.id_brand - LIMIT 1 - ) + JOIN models m ON m.brand_id = b.id_brand + JOIN model_year_engine mye ON mye.model_id = m.id_model ORDER BY b.name_brand """) rows = cur.fetchall() @@ -43,19 +33,13 @@ def get_brands(master_conn): def get_models(master_conn, brand_id): - """Get models for a brand that have at least one MYE with parts.""" + """Get models for a brand that have MYE entries (fast, no vehicle_parts scan).""" cur = master_conn.cursor() cur.execute(""" SELECT DISTINCT m.id_model, m.name_model FROM models m + JOIN model_year_engine mye ON mye.model_id = m.id_model WHERE m.brand_id = %s - AND EXISTS ( - SELECT 1 - FROM model_year_engine mye - JOIN vehicle_parts vp ON vp.model_year_engine_id = mye.id_mye - WHERE mye.model_id = m.id_model - LIMIT 1 - ) ORDER BY m.name_model """, (brand_id,)) rows = cur.fetchall() @@ -64,19 +48,13 @@ def get_models(master_conn, brand_id): def get_years(master_conn, model_id): - """Get distinct years for a model (via MYE) that have parts. Ordered DESC.""" + """Get distinct years for a model via MYE (fast, no vehicle_parts scan). Ordered DESC.""" cur = master_conn.cursor() cur.execute(""" SELECT DISTINCT y.id_year, y.year_car FROM years y JOIN model_year_engine mye ON mye.year_id = y.id_year WHERE mye.model_id = %s - AND EXISTS ( - SELECT 1 - FROM vehicle_parts vp - WHERE vp.model_year_engine_id = mye.id_mye - LIMIT 1 - ) ORDER BY y.year_car DESC """, (model_id,)) rows = cur.fetchall() @@ -85,19 +63,13 @@ def get_years(master_conn, model_id): def get_engines(master_conn, model_id, year_id): - """Get MYE entries (engine + trim) for a model+year combo that have parts.""" + """Get MYE entries (engine + trim) for a model+year combo.""" cur = master_conn.cursor() cur.execute(""" SELECT mye.id_mye, e.name_engine, mye.trim_level FROM model_year_engine mye JOIN engines e ON e.id_engine = mye.engine_id WHERE mye.model_id = %s AND mye.year_id = %s - AND EXISTS ( - SELECT 1 - FROM vehicle_parts vp - WHERE vp.model_year_engine_id = mye.id_mye - LIMIT 1 - ) ORDER BY e.name_engine, mye.trim_level """, (model_id, year_id)) rows = cur.fetchall()