fix/backend-test-mocks #34
@@ -69,8 +69,12 @@ export async function searchBabyProducts(query) {
|
|||||||
.map(transformOFFProduct)
|
.map(transformOFFProduct)
|
||||||
.filter(Boolean);
|
.filter(Boolean);
|
||||||
|
|
||||||
await redisClient.setEx(cacheKey, CACHE_TTL, JSON.stringify(products));
|
try {
|
||||||
console.log(`Cached ${products.length} OFF products for: ${searchTerm}`);
|
await redisClient.setEx(cacheKey, CACHE_TTL, JSON.stringify(products));
|
||||||
|
console.log(`Cached ${products.length} OFF products for: ${searchTerm}`);
|
||||||
|
} catch (cacheErr) {
|
||||||
|
// cache write failed, still return the data
|
||||||
|
}
|
||||||
return products;
|
return products;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,8 +108,12 @@ export async function getBabyProductDetails(barcode) {
|
|||||||
const product = transformOFFProduct(response.data.product);
|
const product = transformOFFProduct(response.data.product);
|
||||||
|
|
||||||
if (product) {
|
if (product) {
|
||||||
await redisClient.setEx(cacheKey, CACHE_TTL, JSON.stringify(product));
|
try {
|
||||||
console.log(`Cached OFF product: ${barcode}`);
|
await redisClient.setEx(cacheKey, CACHE_TTL, JSON.stringify(product));
|
||||||
|
console.log(`Cached OFF product: ${barcode}`);
|
||||||
|
} catch (cacheErr) {
|
||||||
|
// cache write failed, still return the data
|
||||||
|
}
|
||||||
return product;
|
return product;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -601,7 +601,7 @@ app.get('/api/medicines/:medicineId', async (req, res) => {
|
|||||||
|
|
||||||
// ========== UNIFIED PRODUCT SEARCH ==========
|
// ========== UNIFIED PRODUCT SEARCH ==========
|
||||||
|
|
||||||
app.get('/api/products/search', async (req, res) => {
|
app.get('/api/products/search', searchLimiter, async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { q } = req.query;
|
const { q } = req.query;
|
||||||
if (!q || q.trim().length < 2) {
|
if (!q || q.trim().length < 2) {
|
||||||
|
|||||||
@@ -6,9 +6,8 @@ import {
|
|||||||
subscribeToPush,
|
subscribeToPush,
|
||||||
unsubscribeFromPush,
|
unsubscribeFromPush,
|
||||||
} from '../utils/notifications.js';
|
} from '../utils/notifications.js';
|
||||||
import ProductResults from './ProductResults';
|
|
||||||
|
|
||||||
function MedicineResults({ medicines, products = [], onSelect, onSelectProduct, query, currentUser, onLoginRequest }) {
|
function MedicineResults({ medicines, onSelect, query, currentUser, onLoginRequest }) {
|
||||||
if (medicines.length === 0 && query.length >= 2) {
|
if (medicines.length === 0 && query.length >= 2) {
|
||||||
return (
|
return (
|
||||||
<div className="no-results">
|
<div className="no-results">
|
||||||
@@ -28,12 +27,6 @@ function MedicineResults({ medicines, products = [], onSelect, onSelectProduct,
|
|||||||
onLoginRequest={onLoginRequest}
|
onLoginRequest={onLoginRequest}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
{products.length > 0 && (
|
|
||||||
<div className="mt-6">
|
|
||||||
<h3 className="text-lg font-semibold mb-3">Parafarmacia y Bebé</h3>
|
|
||||||
<ProductResults products={products} onSelect={onSelectProduct} />
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ function ProductResults({ products, onSelect }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function ProductCard({ product, onSelect }) {
|
function ProductCard({ product, onSelect }) {
|
||||||
const nutriScore = product.nutri_score;
|
const nutriScore = product.nutriscore;
|
||||||
const nutriScoreColors = {
|
const nutriScoreColors = {
|
||||||
a: '#16a34a',
|
a: '#16a34a',
|
||||||
b: '#65a30d',
|
b: '#65a30d',
|
||||||
|
|||||||
Reference in New Issue
Block a user