Files
YG-Datasets/easy-dataset-main/app/api/projects/[projectId]/eval-datasets/count/route.js

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 }
);
}
}