diff --git a/media.db b/media.db index f3d3c64..07b7ff4 100644 Binary files a/media.db and b/media.db differ diff --git a/src/app/api/photos/route.ts b/src/app/api/photos/route.ts index d1019a9..141a85c 100644 --- a/src/app/api/photos/route.ts +++ b/src/app/api/photos/route.ts @@ -2,6 +2,27 @@ import { NextResponse } from 'next/server'; import db from '@/db'; export async function GET() { - const photos = db.prepare('SELECT * FROM media WHERE type = ?').all('photo'); + const photos = db.prepare(` + SELECT + m.*, + COALESCE(b.bookmark_count, 0) as bookmark_count, + COALESCE(s.avg_rating, 0) as avg_rating, + COALESCE(s.star_count, 0) as star_count + FROM media m + LEFT JOIN ( + SELECT media_id, COUNT(*) as bookmark_count + FROM bookmarks + GROUP BY media_id + ) b ON m.id = b.media_id + LEFT JOIN ( + SELECT + media_id, + AVG(rating) as avg_rating, + COUNT(*) as star_count + FROM stars + GROUP BY media_id + ) s ON m.id = s.media_id + WHERE m.type = ? + `).all('photo'); return NextResponse.json(photos); } \ No newline at end of file diff --git a/src/app/bookmarks/page.tsx b/src/app/bookmarks/page.tsx index 5a2766d..55b1699 100644 --- a/src/app/bookmarks/page.tsx +++ b/src/app/bookmarks/page.tsx @@ -3,9 +3,9 @@ import { useState, useEffect } from 'react'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import InlineVideoPlayer from "@/components/inline-video-player"; -import { Bookmark, Heart, Star, Film } from 'lucide-react'; +import { Bookmark, Heart, Star, Film, Image as ImageIcon } from 'lucide-react'; -interface Video { +interface MediaItem { id: number; title: string; path: string; @@ -19,23 +19,23 @@ interface Video { } export default function BookmarksPage() { - const [videos, setVideos] = useState([]); + const [items, setItems] = useState([]); const [loading, setLoading] = useState(true); - const [selectedVideo, setSelectedVideo] = useState