diff --git a/dashboard/catalog-public.js b/dashboard/catalog-public.js
index 7cde793..2fd2939 100644
--- a/dashboard/catalog-public.js
+++ b/dashboard/catalog-public.js
@@ -16,10 +16,22 @@
engine: null, // {id_mye, name, trim}
category: null, // {id, name}
group: null, // {id, name}
+ region: 'north-america',
page: 1,
totalPages: 1,
};
+ // ── Region selector (global) ──
+ window.setRegion = function (region) {
+ state.region = region;
+ document.querySelectorAll('.region-btn').forEach(function (b) {
+ b.classList.toggle('is-active', b.dataset.region === region);
+ });
+ // Reload brands with new region
+ state.brand = state.model = state.year = state.engine = state.category = state.group = null;
+ loadBrands();
+ };
+
var API = '/api/catalog';
var content = document.getElementById('content');
var breadcrumbEl = document.getElementById('breadcrumb');
@@ -170,7 +182,7 @@
state.level = 'brands';
renderBreadcrumb();
content.innerHTML = '
Cargando marcas...
';
- fetch(API + '/brands')
+ fetch(API + '/brands?region=' + (state.region || 'north-america'))
.then(function (r) { return r.json(); })
.then(function (brands) {
var html = '
Selecciona una Marca
';
diff --git a/dashboard/server.py b/dashboard/server.py
index 6bce8fe..ebacd95 100644
--- a/dashboard/server.py
+++ b/dashboard/server.py
@@ -220,28 +220,54 @@ def enhanced_search_js():
# Public Catalog API — No auth required
# ============================================================================
-NORTH_AMERICA_BRANDS = (
- 'ACURA', 'AUDI', 'BMW', 'BUICK', 'CADILLAC', 'CHEVROLET', 'CHRYSLER',
- 'DODGE', 'FIAT', 'FORD', 'GMC', 'HONDA', 'HYUNDAI', 'INFINITI',
- 'JAGUAR', 'JEEP', 'KIA', 'LAND ROVER', 'LEXUS', 'LINCOLN', 'MAZDA',
- 'MERCEDES-BENZ', 'MINI', 'MITSUBISHI', 'NISSAN', 'PEUGEOT', 'PORSCHE',
- 'RAM', 'RENAULT', 'SEAT', 'SUBARU', 'SUZUKI', 'TESLA', 'TOYOTA',
- 'VOLVO', 'VW',
-)
+REGION_BRANDS = {
+ 'north-america': (
+ 'ACURA', 'AUDI', 'BMW', 'BUICK', 'CADILLAC', 'CHEVROLET', 'CHRYSLER',
+ 'DODGE', 'FIAT', 'FORD', 'GMC', 'HONDA', 'HYUNDAI', 'INFINITI',
+ 'JAGUAR', 'JEEP', 'KIA', 'LAND ROVER', 'LEXUS', 'LINCOLN', 'MAZDA',
+ 'MERCEDES-BENZ', 'MINI', 'MITSUBISHI', 'NISSAN', 'PEUGEOT', 'PORSCHE',
+ 'RAM', 'RENAULT', 'SEAT', 'SUBARU', 'SUZUKI', 'TESLA', 'TOYOTA',
+ 'VOLVO', 'VW',
+ ),
+ 'europe': (
+ 'ALFA ROMEO', 'ASTON MARTIN', 'AUDI', 'BENTLEY', 'BMW', 'CITROEN',
+ 'DACIA', 'DS', 'FERRARI', 'FIAT', 'JAGUAR', 'LAMBORGHINI', 'LAND ROVER',
+ 'MASERATI', 'MERCEDES-BENZ', 'MINI', 'OPEL', 'PEUGEOT', 'PORSCHE',
+ 'RENAULT', 'ROLLS-ROYCE', 'SAAB', 'SEAT', 'SKODA', 'SMART',
+ 'VAUXHALL', 'VOLVO', 'VW',
+ ),
+ 'asia': (
+ 'ACURA', 'DAIHATSU', 'HONDA', 'HYUNDAI', 'INFINITI', 'ISUZU', 'KIA',
+ 'LEXUS', 'MAZDA', 'MITSUBISHI', 'NISSAN', 'SSANGYONG', 'SUBARU',
+ 'SUZUKI', 'TOYOTA',
+ ),
+}
+NORTH_AMERICA_BRANDS = REGION_BRANDS['north-america']
@app.route('/api/catalog/brands')
def api_catalog_brands():
+ region = request.args.get('region', 'north-america')
session = Session()
try:
- rows = session.execute(text("""
- SELECT DISTINCT b.id_brand, b.name_brand
- FROM brands b
- JOIN models m ON m.brand_id = b.id_brand
- JOIN model_year_engine mye ON mye.model_id = m.id_model
- WHERE b.name_brand = ANY(:brands)
- ORDER BY b.name_brand
- """), {'brands': list(NORTH_AMERICA_BRANDS)}).mappings().all()
+ if region == 'all':
+ rows = session.execute(text("""
+ SELECT DISTINCT b.id_brand, b.name_brand
+ FROM brands b
+ 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
+ """)).mappings().all()
+ else:
+ brand_list = list(REGION_BRANDS.get(region, NORTH_AMERICA_BRANDS))
+ rows = session.execute(text("""
+ SELECT DISTINCT b.id_brand, b.name_brand
+ FROM brands b
+ JOIN models m ON m.brand_id = b.id_brand
+ JOIN model_year_engine mye ON mye.model_id = m.id_model
+ WHERE b.name_brand = ANY(:brands)
+ ORDER BY b.name_brand
+ """), {'brands': brand_list}).mappings().all()
return jsonify([{'id_brand': r['id_brand'], 'name_brand': r['name_brand']} for r in rows])
finally:
session.close()