diff --git a/public/erd.svg b/public/erd.svg index 6a1cfcf..42e9d23 100644 --- a/public/erd.svg +++ b/public/erd.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/src/app/page.tsx b/src/app/page.tsx index 024e753..6b765bb 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,21 +1,56 @@ import { HeroBanner } from "@/app/components/HeroBanner"; import HorizontalCardScroller from "@/app/components/HorizontalCardScroller"; -import CategoryBoardBrowser from "@/app/components/CategoryBoardBrowser"; +import { PostList } from "@/app/components/PostList"; import ProfileLabelIcon from "@/app/svgs/profilelableicon"; import SearchIcon from "@/app/svgs/SearchIcon"; +import prisma from "@/lib/prisma"; export default async function Home({ searchParams }: { searchParams: Promise<{ sort?: "recent" | "popular" } | undefined> }) { const sp = await searchParams; const sort = sp?.sort ?? "recent"; + + // λ©μΈνμ΄μ§ μ€μ λΆλ¬μ€κΈ° + const SETTINGS_KEY = "mainpage_settings" as const; + const settingRow = await prisma.setting.findUnique({ where: { key: SETTINGS_KEY } }); + const parsed = settingRow ? JSON.parse(settingRow.value as string) : {}; + const showBanner: boolean = parsed.showBanner ?? true; + const showPartnerShops: boolean = parsed.showPartnerShops ?? true; + const visibleBoardIds: string[] = Array.isArray(parsed.visibleBoardIds) ? parsed.visibleBoardIds : []; + + // 보λ λ©νλ°μ΄ν° (μ΄λ¦ νμμ©) + const boardsMeta = visibleBoardIds.length + ? await prisma.board.findMany({ where: { id: { in: visibleBoardIds } }, select: { id: true, name: true } }) + : []; + const idToMeta = new Map(boardsMeta.map((b) => [b.id, b] as const)); + const orderedBoards = visibleBoardIds + .map((id) => idToMeta.get(id)) + .filter((v): v is { id: string; name: string } => Boolean(v)); + const firstTwo = orderedBoards.slice(0, 2); + const restBoards = orderedBoards.slice(2); + + const renderBoardPanel = (board: { id: string; name: string }) => ( +