diff --git a/backend/app/api/shopping.py b/backend/app/api/shopping.py index 320f93b..38efe00 100644 --- a/backend/app/api/shopping.py +++ b/backend/app/api/shopping.py @@ -3,7 +3,7 @@ import uuid from datetime import datetime, timezone from fastapi import APIRouter, Depends, HTTPException, Query from fastapi.responses import Response -from sqlalchemy import select, text +from sqlalchemy import select, text, or_ from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.orm import selectinload @@ -104,7 +104,7 @@ async def search_products( ): stmt = select(Product).order_by(Product.frequency_score.desc(), Product.name) if q: - stmt = stmt.where(Product.name.ilike(f"%{q}%")) + stmt = stmt.where(or_(Product.name.ilike(f"%{q}%"), Product.brand.ilike(f"%{q}%"))) stmt = stmt.limit(limit) result = await session.execute(stmt) return result.scalars().all() diff --git a/frontend/src/pages/ShoppingPage.tsx b/frontend/src/pages/ShoppingPage.tsx index cbd2542..520fa64 100644 --- a/frontend/src/pages/ShoppingPage.tsx +++ b/frontend/src/pages/ShoppingPage.tsx @@ -1,5 +1,6 @@ // frontend/src/pages/ShoppingPage.tsx import { useState, useEffect, useCallback } from 'react' +import { matchesSearch } from '../utils/search' import type { ShoppingListDetail, ShoppingList, Store, Product } from '../api/shopping' import { fetchLists, createList, fetchListDetail, deleteList, @@ -213,9 +214,10 @@ export default function ShoppingPage() { const hasCurrentList = currentList !== null const pastLists = allLists.filter(l => l.status === 'done') - const filteredProducts = products.filter( - p => !itemSearch.trim() || p.name.toLowerCase().includes(itemSearch.trim().toLowerCase()) - ) + const filteredProducts = products.filter(p => { + const term = itemSearch.trim() + return !term || matchesSearch(p.name, term) || matchesSearch(p.brand ?? '', term) + }) return (