Migrate backend from Python to Java Spring Boot
- Full Java 21 + Spring Boot 3.3 backend with Virtual Threads - HikariCP connection pool for Oracle ADB - JWT auth, Redis caching, OCI GenAI integration - YouTube transcript extraction via API + Playwright browser fallback - SSE streaming for bulk operations - Scheduled daemon for channel scanning/video processing - Mobile UI: collapse restaurant list to single row on selection - Switch PM2 ecosystem config to Java backend Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -11,6 +11,7 @@ import RestaurantList from "@/components/RestaurantList";
|
||||
import RestaurantDetail from "@/components/RestaurantDetail";
|
||||
import MyReviewsList from "@/components/MyReviewsList";
|
||||
import BottomSheet from "@/components/BottomSheet";
|
||||
import { getCuisineIcon } from "@/lib/cuisine-icons";
|
||||
|
||||
const CUISINE_GROUPS: { label: string; prefix: string }[] = [
|
||||
{ label: "한식", prefix: "한식" },
|
||||
@@ -819,15 +820,34 @@ export default function Home() {
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<div className="flex-1 bg-white dark:bg-gray-950 overflow-y-auto">
|
||||
{mobileListContent}
|
||||
{/* Scroll-down hint to reveal map */}
|
||||
<div className="flex flex-col items-center py-4 text-gray-300">
|
||||
<span className="text-lg">▼</span>
|
||||
<span className="text-[10px]">아래로 스크롤하면 지도</span>
|
||||
{/* List area — if selected, show single row; otherwise full list */}
|
||||
{selected ? (
|
||||
<div
|
||||
className="shrink-0 bg-white dark:bg-gray-950 border-b dark:border-gray-800 px-3 py-2 flex items-center gap-2 cursor-pointer"
|
||||
onClick={() => { setSelected(null); setShowDetail(false); }}
|
||||
>
|
||||
<span className="text-base">{getCuisineIcon(selected.cuisine_type)}</span>
|
||||
<span className="font-semibold text-sm truncate flex-1">{selected.name}</span>
|
||||
{selected.rating && (
|
||||
<span className="text-xs text-gray-500"><span className="text-yellow-500">★</span> {selected.rating}</span>
|
||||
)}
|
||||
{selected.cuisine_type && (
|
||||
<span className="text-xs text-gray-400">{selected.cuisine_type}</span>
|
||||
)}
|
||||
<button
|
||||
onClick={(e) => { e.stopPropagation(); setSelected(null); setShowDetail(false); }}
|
||||
className="text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 text-lg leading-none ml-1"
|
||||
>
|
||||
✕
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div className="h-[70vh] shrink-0 relative border-t dark:border-gray-800">
|
||||
) : (
|
||||
<div className="max-h-[360px] bg-white dark:bg-gray-950 overflow-y-auto border-b dark:border-gray-800">
|
||||
{mobileListContent}
|
||||
</div>
|
||||
)}
|
||||
{/* Map fills remaining space below the list */}
|
||||
<div className="flex-1 relative">
|
||||
<MapView
|
||||
restaurants={filteredRestaurants}
|
||||
selected={selected}
|
||||
|
||||
Reference in New Issue
Block a user