From 1c248a18fa2cb2fd20e6c31f50925d839fe78a42 Mon Sep 17 00:00:00 2001 From: Caihaohan Date: Tue, 27 Jan 2026 19:34:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=AD=A3=E5=BA=A6=E5=88=97=E8=A1=A8=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/api/keyword-cloud/quarters/route.ts | 47 +++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/app/api/keyword-cloud/quarters/route.ts diff --git a/src/app/api/keyword-cloud/quarters/route.ts b/src/app/api/keyword-cloud/quarters/route.ts new file mode 100644 index 0000000..938c767 --- /dev/null +++ b/src/app/api/keyword-cloud/quarters/route.ts @@ -0,0 +1,47 @@ +import { NextResponse } from 'next/server'; +import { getAllQuarters } from '@/hooks/useKeywordCloud'; + +export const dynamic = 'force-dynamic'; + +/** + * GET /api/keyword-cloud/quarters + * 获取季度列表 + */ +export async function GET(request: Request) { + try { + const { searchParams } = new URL(request.url); + const isActive = searchParams.get('isActive'); + + const quarters = await getAllQuarters( + isActive !== null ? { isActive: isActive === 'true' } : undefined + ); + + // 为每个季度添加关键词计数 + const { prisma } = await import('@/lib/prisma'); + const quartersWithCount = await Promise.all( + quarters.map(async (q) => { + const count = await prisma.keyword.count({ + where: { quarterId: q.id }, + }); + return { + ...q, + keywordCount: count, + }; + }) + ); + + return NextResponse.json({ + success: true, + quarters: quartersWithCount, + }); + } catch (error) { + console.error('Error fetching quarters:', error); + return NextResponse.json( + { + success: false, + error: 'Failed to fetch quarters', + }, + { status: 500 } + ); + } +}