fix(compat): get_compatibility used wrong connection for master tables
inventory_vehicle_compat.get_compatibility was trying to JOIN tenant inventory_vehicle_compat with master tables (model_year_engine, brands, models, years, engines) on a single tenant connection. Those tables only exist in the master DB, causing the query to fail silently. Fix: split into two queries: 1. Fetch MYE IDs from tenant's inventory_vehicle_compat 2. Resolve vehicle details from master DB via ANY(%s) 3. Merge results Also fixes the argument mismatch: inventory_bp passed (tenant, master, item_id) but the function only accepted 2 args.
This commit is contained in:
@@ -231,36 +231,59 @@ def remove_all_compatibility(tenant_conn, inventory_id):
|
||||
return deleted
|
||||
|
||||
|
||||
def get_compatibility(tenant_conn, inventory_id):
|
||||
"""Get all MYE compatibilities for an inventory item."""
|
||||
cur = tenant_conn.cursor()
|
||||
cur.execute("""
|
||||
SELECT mye.id_mye, b.name_brand, m.name_model, y.year_car, e.name_engine,
|
||||
ivc.source, ivc.confidence, ivc.created_at
|
||||
FROM inventory_vehicle_compat ivc
|
||||
JOIN model_year_engine mye ON mye.id_mye = ivc.model_year_engine_id
|
||||
def get_compatibility(tenant_conn, master_conn, inventory_id):
|
||||
"""Get all MYE compatibilities for an inventory item.
|
||||
|
||||
Queries inventory_vehicle_compat from the tenant DB, then resolves
|
||||
vehicle details (brand/model/year/engine) from the master DB.
|
||||
"""
|
||||
# 1. Get MYE IDs + metadata from tenant
|
||||
cur_t = tenant_conn.cursor()
|
||||
cur_t.execute("""
|
||||
SELECT model_year_engine_id, source, confidence, created_at
|
||||
FROM inventory_vehicle_compat
|
||||
WHERE inventory_id = %s
|
||||
ORDER BY model_year_engine_id
|
||||
""", (inventory_id,))
|
||||
rows = cur_t.fetchall()
|
||||
cur_t.close()
|
||||
|
||||
if not rows:
|
||||
return []
|
||||
|
||||
mye_ids = [r[0] for r in rows]
|
||||
|
||||
# 2. Resolve vehicle details from master DB
|
||||
cur_m = master_conn.cursor()
|
||||
cur_m.execute("""
|
||||
SELECT mye.id_mye, b.name_brand, m.name_model, y.year_car, e.name_engine
|
||||
FROM model_year_engine mye
|
||||
JOIN models m ON m.id_model = mye.model_id
|
||||
JOIN brands b ON b.id_brand = m.brand_id
|
||||
JOIN years y ON y.id_year = mye.year_id
|
||||
JOIN engines e ON e.id_engine = mye.engine_id
|
||||
WHERE ivc.inventory_id = %s
|
||||
WHERE mye.id_mye = ANY(%s)
|
||||
ORDER BY b.name_brand, m.name_model, y.year_car
|
||||
""", (inventory_id,))
|
||||
rows = cur.fetchall()
|
||||
cur.close()
|
||||
return [
|
||||
{
|
||||
'model_year_engine_id': r[0],
|
||||
'brand': r[1],
|
||||
'model': r[2],
|
||||
'year': r[3],
|
||||
'engine': r[4],
|
||||
'source': r[5],
|
||||
'confidence': float(r[6]),
|
||||
'created_at': str(r[7]),
|
||||
}
|
||||
for r in rows
|
||||
]
|
||||
""", (mye_ids,))
|
||||
details = {r[0]: r for r in cur_m.fetchall()}
|
||||
cur_m.close()
|
||||
|
||||
# 3. Merge
|
||||
result = []
|
||||
for mye_id, source, confidence, created_at in rows:
|
||||
d = details.get(mye_id)
|
||||
if d:
|
||||
result.append({
|
||||
'model_year_engine_id': mye_id,
|
||||
'brand': d[1],
|
||||
'model': d[2],
|
||||
'year': d[3],
|
||||
'engine': d[4],
|
||||
'source': source,
|
||||
'confidence': float(confidence),
|
||||
'created_at': str(created_at),
|
||||
})
|
||||
return result
|
||||
|
||||
|
||||
def search_mye(master_conn, brand_id=None, model_id=None, year_id=None, engine_id=None):
|
||||
|
||||
Reference in New Issue
Block a user