Fix case-insensitive brand search, add hotspots endpoint and clean URLs
- Make brand and model name queries case-insensitive using UPPER() - Add /api/diagrams/<id>/hotspots endpoint for fetching diagram hotspots - Add /admin and /landing clean URL routes for HTML pages Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -59,7 +59,7 @@ def get_models_by_brand(brand_name=None):
|
|||||||
JOIN brands b ON m.brand_id = b.id
|
JOIN brands b ON m.brand_id = b.id
|
||||||
JOIN model_year_engine mye ON mye.model_id = m.id
|
JOIN model_year_engine mye ON mye.model_id = m.id
|
||||||
JOIN vehicle_parts vp ON vp.model_year_engine_id = mye.id
|
JOIN vehicle_parts vp ON vp.model_year_engine_id = mye.id
|
||||||
WHERE b.name = ?
|
WHERE UPPER(b.name) = UPPER(?)
|
||||||
ORDER BY m.name
|
ORDER BY m.name
|
||||||
""", (brand_name,))
|
""", (brand_name,))
|
||||||
else:
|
else:
|
||||||
@@ -109,10 +109,10 @@ def search_vehicles(brand=None, model=None, year=None, engine=None, with_parts=T
|
|||||||
|
|
||||||
params = []
|
params = []
|
||||||
if brand:
|
if brand:
|
||||||
query += " AND b.name = ?"
|
query += " AND UPPER(b.name) = UPPER(?)"
|
||||||
params.append(brand)
|
params.append(brand)
|
||||||
if model:
|
if model:
|
||||||
query += " AND m.name = ?"
|
query += " AND UPPER(m.name) = UPPER(?)"
|
||||||
params.append(model)
|
params.append(model)
|
||||||
if year:
|
if year:
|
||||||
query += " AND y.year = ?"
|
query += " AND y.year = ?"
|
||||||
@@ -153,6 +153,16 @@ def index():
|
|||||||
"""Serve the main dashboard page"""
|
"""Serve the main dashboard page"""
|
||||||
return send_from_directory('.', 'index.html')
|
return send_from_directory('.', 'index.html')
|
||||||
|
|
||||||
|
@app.route('/admin')
|
||||||
|
def admin_page():
|
||||||
|
"""Serve the admin panel"""
|
||||||
|
return send_from_directory('.', 'admin.html')
|
||||||
|
|
||||||
|
@app.route('/landing')
|
||||||
|
def landing_page():
|
||||||
|
"""Serve the customer landing page"""
|
||||||
|
return send_from_directory('.', 'customer-landing.html')
|
||||||
|
|
||||||
@app.route('/<path:path>')
|
@app.route('/<path:path>')
|
||||||
def static_files(path):
|
def static_files(path):
|
||||||
"""Serve static files"""
|
"""Serve static files"""
|
||||||
@@ -184,10 +194,10 @@ def api_years():
|
|||||||
|
|
||||||
params = []
|
params = []
|
||||||
if brand:
|
if brand:
|
||||||
query += " AND b.name = ?"
|
query += " AND UPPER(b.name) = UPPER(?)"
|
||||||
params.append(brand)
|
params.append(brand)
|
||||||
if model:
|
if model:
|
||||||
query += " AND m.name = ?"
|
query += " AND UPPER(m.name) = UPPER(?)"
|
||||||
params.append(model)
|
params.append(model)
|
||||||
|
|
||||||
query += " ORDER BY y.year DESC"
|
query += " ORDER BY y.year DESC"
|
||||||
@@ -221,10 +231,10 @@ def api_engines():
|
|||||||
|
|
||||||
params = []
|
params = []
|
||||||
if brand:
|
if brand:
|
||||||
query += " AND b.name = ?"
|
query += " AND UPPER(b.name) = UPPER(?)"
|
||||||
params.append(brand)
|
params.append(brand)
|
||||||
if model:
|
if model:
|
||||||
query += " AND m.name = ?"
|
query += " AND UPPER(m.name) = UPPER(?)"
|
||||||
params.append(model)
|
params.append(model)
|
||||||
if year:
|
if year:
|
||||||
query += " AND y.year = ?"
|
query += " AND y.year = ?"
|
||||||
@@ -661,11 +671,11 @@ def api_model_year_engine():
|
|||||||
params = []
|
params = []
|
||||||
|
|
||||||
if brand:
|
if brand:
|
||||||
query += " AND b.name = ?"
|
query += " AND UPPER(b.name) = UPPER(?)"
|
||||||
params.append(brand)
|
params.append(brand)
|
||||||
|
|
||||||
if model:
|
if model:
|
||||||
query += " AND m.name = ?"
|
query += " AND UPPER(m.name) = UPPER(?)"
|
||||||
params.append(model)
|
params.append(model)
|
||||||
|
|
||||||
if year:
|
if year:
|
||||||
@@ -1127,6 +1137,50 @@ def api_diagram_detail(diagram_id):
|
|||||||
return jsonify({'error': str(e)}), 500
|
return jsonify({'error': str(e)}), 500
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/api/diagrams/<int:diagram_id>/hotspots')
|
||||||
|
def api_diagram_hotspots(diagram_id):
|
||||||
|
"""Get all hotspots for a specific diagram"""
|
||||||
|
try:
|
||||||
|
conn = get_db_connection()
|
||||||
|
cursor = conn.cursor()
|
||||||
|
|
||||||
|
cursor.execute("""
|
||||||
|
SELECT
|
||||||
|
h.id,
|
||||||
|
h.part_id,
|
||||||
|
h.callout_number,
|
||||||
|
h.label,
|
||||||
|
h.shape,
|
||||||
|
h.coords,
|
||||||
|
h.color,
|
||||||
|
p.name AS part_name,
|
||||||
|
p.oem_part_number AS part_number
|
||||||
|
FROM diagram_hotspots h
|
||||||
|
LEFT JOIN parts p ON h.part_id = p.id
|
||||||
|
WHERE h.diagram_id = ?
|
||||||
|
ORDER BY h.callout_number
|
||||||
|
""", (diagram_id,))
|
||||||
|
|
||||||
|
hotspots = []
|
||||||
|
for row in cursor.fetchall():
|
||||||
|
hotspots.append({
|
||||||
|
'id': row['id'],
|
||||||
|
'part_id': row['part_id'],
|
||||||
|
'callout_number': row['callout_number'],
|
||||||
|
'label': row['label'],
|
||||||
|
'shape': row['shape'],
|
||||||
|
'coords': row['coords'],
|
||||||
|
'color': row['color'],
|
||||||
|
'part_name': row['part_name'],
|
||||||
|
'part_number': row['part_number']
|
||||||
|
})
|
||||||
|
|
||||||
|
conn.close()
|
||||||
|
return jsonify(hotspots)
|
||||||
|
except Exception as e:
|
||||||
|
return jsonify({'error': str(e)}), 500
|
||||||
|
|
||||||
|
|
||||||
@app.route('/api/groups/<int:group_id>/diagrams')
|
@app.route('/api/groups/<int:group_id>/diagrams')
|
||||||
def api_group_diagrams(group_id):
|
def api_group_diagrams(group_id):
|
||||||
"""Get all diagrams for a specific part group"""
|
"""Get all diagrams for a specific part group"""
|
||||||
@@ -2899,11 +2953,11 @@ def api_admin_list_fitment():
|
|||||||
params.append(mye_id)
|
params.append(mye_id)
|
||||||
|
|
||||||
if brand:
|
if brand:
|
||||||
where_clause += " AND b.name = ?"
|
where_clause += " AND UPPER(b.name) = UPPER(?)"
|
||||||
params.append(brand)
|
params.append(brand)
|
||||||
|
|
||||||
if model:
|
if model:
|
||||||
where_clause += " AND m.name = ?"
|
where_clause += " AND UPPER(m.name) = UPPER(?)"
|
||||||
params.append(model)
|
params.append(model)
|
||||||
|
|
||||||
# Count query
|
# Count query
|
||||||
|
|||||||
Reference in New Issue
Block a user