import { fetchJson } from '@/lib/utils/server'; import type { BannerActiveListResponse, BannerItem } from '@/types/response/banner/active-list'; import type { LiveChannelListResponse } from '@/types/response/channel/live-list'; import HomeBannerCarousel from './_components/HomeBannerCarousel'; import LiveChannelGrid from './_components/LiveChannelGrid'; import LiveChannelEmpty from './_components/LiveChannelEmpty'; import { FEATURE_CHANNEL } from '@/constants/features'; import './_components/home.scss'; const BANNER_POSITION_CODE = 'main-top'; const LIVE_PAGE_SIZE = 24; async function loadActiveBanners(): Promise { const res = await fetchJson('/api/banner/items', { method: 'POST', body: JSON.stringify({ code: BANNER_POSITION_CODE, onlyActive: true }) }); if (!res.success || !res.data) { return []; } return res.data.list.filter(b => b.desktopImage !== null || b.mobileImage !== null); } async function loadLiveChannels(): Promise<{ channels: LiveChannelListResponse['channels']; total: number }> { const res = await fetchJson(`/api/channel/live-list?limit=${LIVE_PAGE_SIZE}&offset=0`, { method: 'GET' }); if (!res.success || !res.data) { return { channels: [], total: 0 }; } return { channels: res.data.channels, total: res.data.total }; } export default async function Home() { // 채널 기능 OFF: 라이브 채널 섹션 미노출이므로 조회 생략 const [banners, live] = await Promise.all([ loadActiveBanners(), FEATURE_CHANNEL ? loadLiveChannels() : Promise.resolve({ channels: [], total: 0 }) ]); return (
{FEATURE_CHANNEL && ( live.channels.length === 0 ? ( ) : ( ) )}
); }