64 lines
1.9 KiB
JavaScript
64 lines
1.9 KiB
JavaScript
import { NextResponse } from 'next/server';
|
|
import { db } from '@/lib/db';
|
|
import { buildEvalQuestionWhere } from '@/lib/db/evalDatasets';
|
|
|
|
export async function GET(request, { params }) {
|
|
try {
|
|
const { projectId } = params;
|
|
const { searchParams } = new URL(request.url);
|
|
|
|
const questionType = searchParams.get('questionType') || '';
|
|
const keyword = searchParams.get('keyword') || '';
|
|
const chunkId = searchParams.get('chunkId') || '';
|
|
|
|
const questionTypes = searchParams.getAll('questionTypes') || [];
|
|
|
|
const tags =
|
|
searchParams.getAll('tags').length > 0
|
|
? searchParams.getAll('tags')
|
|
: searchParams.get('tag')
|
|
? searchParams.get('tag').split(',')
|
|
: [];
|
|
|
|
const where = buildEvalQuestionWhere(projectId, {
|
|
questionType: questionType || undefined,
|
|
questionTypes: questionTypes.length > 0 ? questionTypes : undefined,
|
|
keyword: keyword || undefined,
|
|
chunkId: chunkId || undefined,
|
|
tags: tags.length > 0 ? tags : undefined
|
|
});
|
|
|
|
const [total, byTypeRaw] = await Promise.all([
|
|
db.evalDatasets.count({ where }),
|
|
db.evalDatasets.groupBy({
|
|
by: ['questionType'],
|
|
where,
|
|
_count: { id: true }
|
|
})
|
|
]);
|
|
|
|
const byType = {};
|
|
byTypeRaw.forEach(item => {
|
|
byType[item.questionType] = item._count.id;
|
|
});
|
|
|
|
const hasShortAnswer = (byType.short_answer || 0) > 0;
|
|
const hasOpenEnded = (byType.open_ended || 0) > 0;
|
|
const hasSubjective = hasShortAnswer || hasOpenEnded;
|
|
|
|
return NextResponse.json(
|
|
{
|
|
code: 0,
|
|
data: { total, byType, hasSubjective, hasShortAnswer, hasOpenEnded }
|
|
},
|
|
{ status: 200 }
|
|
);
|
|
} catch (error) {
|
|
console.error('Failed to count eval datasets:', error);
|
|
return NextResponse.json(
|
|
{ code: 500, error: 'Failed to count eval datasets', message: error.message },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|