ffff
This commit is contained in:
@@ -18,11 +18,11 @@ const parseOptionalPositiveInt = (value: unknown, fieldName: string) => {
|
||||
|
||||
export const buildVocabularySummaryFilters = (query: Record<string, any>) => {
|
||||
const studentNo = String(query.studentNo || '').trim();
|
||||
const rawMinCorrectWords = query.minCorrectWords ?? query.minWords;
|
||||
const wordCountResult = parseOptionalPositiveInt(rawMinCorrectWords, '正确单词数量');
|
||||
const rawMinUniqueWords = query.minUniqueWords ?? query.minCorrectWords ?? query.minWords;
|
||||
const wordCountResult = parseOptionalPositiveInt(rawMinUniqueWords, '去重单词数量');
|
||||
if ('error' in wordCountResult) return { error: wordCountResult.error };
|
||||
|
||||
const minCorrectWords = wordCountResult.value;
|
||||
const minUniqueWords = wordCountResult.value;
|
||||
const userMatchStages = studentNo
|
||||
? [{
|
||||
$match: {
|
||||
@@ -35,13 +35,18 @@ export const buildVocabularySummaryFilters = (query: Record<string, any>) => {
|
||||
: [];
|
||||
|
||||
const baseMatch: Record<string, any> = {};
|
||||
if (typeof minCorrectWords === 'number') {
|
||||
baseMatch['stats.correctWords'] = { $gte: minCorrectWords };
|
||||
}
|
||||
|
||||
return {
|
||||
minCorrectWords,
|
||||
minUniqueWords,
|
||||
userMatchStages,
|
||||
baseMatch
|
||||
};
|
||||
};
|
||||
|
||||
export const applyVocabularySummaryItemFilters = <T extends { uniqueWords?: number }>(
|
||||
items: T[],
|
||||
minUniqueWords?: number
|
||||
): T[] => {
|
||||
if (typeof minUniqueWords !== 'number') return items;
|
||||
return items.filter(item => Number(item.uniqueWords || 0) >= minUniqueWords);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user