import { NextRequest, NextResponse } from 'next/server'; import type { ApiResponse, EventsQueryParams, EventType } from '@/lib/types'; import { getEvents } from '@/lib/analytics'; // 获取事件列表 export async function GET(request: NextRequest) { try { const searchParams = request.nextUrl.searchParams; // 构建查询参数,所有参数都是可选的 const params: Partial = { // 时间范围参数现在是可选的 ...(searchParams.has('startTime') && { startTime: searchParams.get('startTime')! }), ...(searchParams.has('endTime') && { endTime: searchParams.get('endTime')! }), // 其他过滤参数 ...(searchParams.has('eventType') && { eventType: searchParams.get('eventType') as EventType }), ...(searchParams.has('linkId') && { linkId: searchParams.get('linkId')! }), ...(searchParams.has('linkSlug') && { linkSlug: searchParams.get('linkSlug')! }), ...(searchParams.has('userId') && { userId: searchParams.get('userId')! }), ...(searchParams.has('teamId') && { teamId: searchParams.get('teamId')! }), ...(searchParams.has('projectId') && { projectId: searchParams.get('projectId')! }), ...(searchParams.has('tags') && { tags: searchParams.get('tags')!.split(',').filter(Boolean) }), ...(searchParams.has('searchSlug') && { searchSlug: searchParams.get('searchSlug')! }), // 分页和排序参数,设置默认值 page: searchParams.has('page') ? parseInt(searchParams.get('page')!, 10) : 1, pageSize: searchParams.has('pageSize') ? parseInt(searchParams.get('pageSize')!, 10) : 20, ...(searchParams.has('sortBy') && { sortBy: searchParams.get('sortBy')! }), ...(searchParams.has('sortOrder') && { sortOrder: searchParams.get('sortOrder') as 'asc' | 'desc' }) }; // 验证 tags 参数 if (params.tags?.some(tag => !tag.trim())) { return NextResponse.json({ success: false, error: 'Invalid tags format' }, { status: 400 }); } // 获取事件数据 const { events, total } = await getEvents(params); // 构建响应 const response: ApiResponse = { success: true, data: events, meta: { total, page: params.page || 1, pageSize: params.pageSize || 20, filters: { startTime: params.startTime, endTime: params.endTime, tags: params.tags, teamId: params.teamId, projectId: params.projectId, searchSlug: params.searchSlug } } }; return NextResponse.json(response); } catch (error) { console.error('Error in GET /events:', error); const response: ApiResponse = { success: false, error: error instanceof Error ? error.message : 'Unknown error occurred' }; return NextResponse.json(response, { status: 500 }); } }