'use strict'; const express = require('express'); const paginate = require('express-paginate'); const ProductApi = require('../api/productApi'); const StoreApi = require('../api/storeApi'); const router = express.Router(); router.get('/', async function (req, res, next) { req.query.limit = 39; req.productsArray = null; // Use query parameters if provided, otherwise default to lowest price if (req.query.sort) { req.sort = req.query.sort; req.explicitSort = true; } else { req.sort = "price"; req.order = 1; req.explicitSort = false; } if (req.query.order) { req.order = parseInt(req.query.order); req.explicitSort = true; } else { req.explicitSort = req.explicitSort || false; } try { var stores = StoreApi.getStoresWichContributes(true, true) .then((stores) => { return stores; }, (error) => { console.error('Error obtaining stores that contributes ' + error); return []; }); var products = ProductApi.search(req) .then((products) => { // render the products products.paginate = { pages: paginate.getArrayPages(req)(99, products.pages, products.page), has_more: paginate.hasNextPages(req)(products.pages) } return products; }, (error) => { console.error('Error searching products ' + error); res.redirect('/'); }); await Promise.all([stores, products]) .then((values) => { // El display del título / contador depende de cómo llegó la búsqueda: // - `?text=...` → search bar del usuario (texto crudo tipeado) // - `?categoryText=...&categoryName=Xxx` → click en una categoría del menú // (categoryText es la lista de sinónimos para filtrar; categoryName es el label visible) // Si ninguno está, fallback a un título genérico. const userText = req.query.text || ''; const categoryName = req.query.categoryName || ''; const displayText = userText || categoryName; const pageName = userText ? 'Resultados para la búsqueda: ' + userText : categoryName ? categoryName + ' - HardGamers' : 'Resultados de la búsqueda'; res.render('search', { parameters: req.query, pageName: pageName, searchText: displayText, highlightedStore: values[0].highlightedStore, products: values[1], defaultSort: req.sort || 'price', defaultOrder: req.order || 1 }); }, (error) => { console.error('Error in main page ' + error); }); } catch (error) { console.error('Error on /search ' + error) res.render('error'); } }); module.exports = router;