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 model_year_engine mye ON mye.model_id = m.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
|
||||
""", (brand_name,))
|
||||
else:
|
||||
@@ -109,10 +109,10 @@ def search_vehicles(brand=None, model=None, year=None, engine=None, with_parts=T
|
||||
|
||||
params = []
|
||||
if brand:
|
||||
query += " AND b.name = ?"
|
||||
query += " AND UPPER(b.name) = UPPER(?)"
|
||||
params.append(brand)
|
||||
if model:
|
||||
query += " AND m.name = ?"
|
||||
query += " AND UPPER(m.name) = UPPER(?)"
|
||||
params.append(model)
|
||||
if year:
|
||||
query += " AND y.year = ?"
|
||||
@@ -153,6 +153,16 @@ def index():
|
||||
"""Serve the main dashboard page"""
|
||||
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>')
|
||||
def static_files(path):
|
||||
"""Serve static files"""
|
||||
@@ -184,10 +194,10 @@ def api_years():
|
||||
|
||||
params = []
|
||||
if brand:
|
||||
query += " AND b.name = ?"
|
||||
query += " AND UPPER(b.name) = UPPER(?)"
|
||||
params.append(brand)
|
||||
if model:
|
||||
query += " AND m.name = ?"
|
||||
query += " AND UPPER(m.name) = UPPER(?)"
|
||||
params.append(model)
|
||||
|
||||
query += " ORDER BY y.year DESC"
|
||||
@@ -221,10 +231,10 @@ def api_engines():
|
||||
|
||||
params = []
|
||||
if brand:
|
||||
query += " AND b.name = ?"
|
||||
query += " AND UPPER(b.name) = UPPER(?)"
|
||||
params.append(brand)
|
||||
if model:
|
||||
query += " AND m.name = ?"
|
||||
query += " AND UPPER(m.name) = UPPER(?)"
|
||||
params.append(model)
|
||||
if year:
|
||||
query += " AND y.year = ?"
|
||||
@@ -661,11 +671,11 @@ def api_model_year_engine():
|
||||
params = []
|
||||
|
||||
if brand:
|
||||
query += " AND b.name = ?"
|
||||
query += " AND UPPER(b.name) = UPPER(?)"
|
||||
params.append(brand)
|
||||
|
||||
if model:
|
||||
query += " AND m.name = ?"
|
||||
query += " AND UPPER(m.name) = UPPER(?)"
|
||||
params.append(model)
|
||||
|
||||
if year:
|
||||
@@ -1127,6 +1137,50 @@ def api_diagram_detail(diagram_id):
|
||||
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')
|
||||
def api_group_diagrams(group_id):
|
||||
"""Get all diagrams for a specific part group"""
|
||||
@@ -2899,11 +2953,11 @@ def api_admin_list_fitment():
|
||||
params.append(mye_id)
|
||||
|
||||
if brand:
|
||||
where_clause += " AND b.name = ?"
|
||||
where_clause += " AND UPPER(b.name) = UPPER(?)"
|
||||
params.append(brand)
|
||||
|
||||
if model:
|
||||
where_clause += " AND m.name = ?"
|
||||
where_clause += " AND UPPER(m.name) = UPPER(?)"
|
||||
params.append(model)
|
||||
|
||||
# Count query
|
||||
|
||||
Reference in New Issue
Block a user