Improve video recommendations with server-side search filtering

Refactors the video recommendation fetching logic to utilize the existing search endpoint on the backend for filtering, improving efficiency and consistency.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: d7424866-83d1-4486-a212-ac12b4c7becf
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/8cc42625-c1f5-4e43-99bd-77f2c4dedee2/d7424866-83d1-4486-a212-ac12b4c7becf/ROSfcPv
This commit is contained in:
sebastjanartic 2025-08-28 17:12:21 +00:00
parent b92d7324ac
commit 99d29646e2

View File

@ -62,29 +62,21 @@ export default function VideoPage() {
enabled: !!videoId,
});
// Fetch recommended videos (excluding current video)
// Fetch recommended videos using the same search endpoint as main page
const { data: recommendedResponse } = useQuery<VideosResponse>({
queryKey: ["/api/videos"],
queryFn: () => fetch("/api/videos?limit=20&offset=0").then(res => res.json()),
queryKey: ["/api/videos", sidebarSearchQuery],
queryFn: () => {
const url = sidebarSearchQuery && sidebarSearchQuery.length >= 2
? `/api/videos?limit=50&offset=0&search=${encodeURIComponent(sidebarSearchQuery)}`
: "/api/videos?limit=50&offset=0";
return fetch(url).then(res => res.json());
},
enabled: !!videoId,
});
// Filter recommended videos based on search and exclude current video
// Simply exclude current video - search filtering is now done server-side
const filteredRecommendedVideos = (recommendedResponse?.videos || [])
.filter(v => v.id !== videoId)
.filter(video => {
if (!sidebarSearchQuery || sidebarSearchQuery.length < 2) return true;
const searchLower = sidebarSearchQuery.toLowerCase();
const titleMatch = video.title?.toLowerCase().includes(searchLower);
const descMatch = video.description?.toLowerCase().includes(searchLower);
// Debug logging
if (sidebarSearchQuery.length >= 2) {
console.log(`Search "${sidebarSearchQuery}": Video "${video.title}" - Title match: ${titleMatch}, Desc match: ${descMatch}`);
}
return titleMatch || descMatch;
});
.filter(v => v.id !== videoId);