'use client'; import { useQuery } from '@tanstack/react-query'; import { getPosts } from '@/api/posts'; import { Post } from '@/types'; import { Loader2, Calendar, Archive, FileText, ChevronRight } from 'lucide-react'; import { useMemo } from 'react'; import Link from 'next/link'; import { format } from 'date-fns'; import { clsx } from 'clsx'; export default function ArchivePage() { // 1. 전체 게시글 조회 (최대 1000개) const { data, isLoading } = useQuery({ queryKey: ['posts', 'all'], queryFn: () => getPosts({ page: 0, size: 1000 }), staleTime: 1000 * 60 * 5, // 5분 캐시 }); // 2. 게시글 그룹화 (연도 -> 월) const archiveGroups = useMemo(() => { if (!data?.content) return {}; const groups: { [year: string]: { [month: string]: Post[] } } = {}; data.content.forEach((post) => { const date = new Date(post.createdAt); const year = date.getFullYear().toString(); const month = (date.getMonth() + 1).toString().padStart(2, '0'); // '01', '02' 형식 if (!groups[year]) groups[year] = {}; if (!groups[year][month]) groups[year][month] = []; groups[year][month].push(post); }); return groups; }, [data]); // 3. 연도 내림차순 정렬 const sortedYears = useMemo(() => { return Object.keys(archiveGroups).sort((a, b) => Number(b) - Number(a)); }, [archiveGroups]); // 🛠️ 총 게시글 수 수정 (백엔드 PagedModel 대응) // page 정보가 data 안에 직접 있거나, page 객체 안에 있을 수 있음 const meta = (data as any)?.page || data; const totalPosts = meta?.totalElements || 0; if (isLoading) { return (
지금까지 작성한 {totalPosts}개의 글이 기록되어 있습니다.
아직 작성된 기록이 없습니다.