From b70dc68a85906d83252658cea4cab4190ba6acd8 Mon Sep 17 00:00:00 2001 From: Developer Date: Fri, 15 May 2026 09:55:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=A2=98=E5=BA=93=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=85=A8=E9=9D=A2=E4=BF=AE=E5=A4=8D=20-=20cr?= =?UTF-8?q?eate=E6=96=B9=E6=B3=95templateId=E4=BC=A0=E5=8F=82=E3=80=81?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E6=94=B9=E4=B8=BABadRequest=E3=80=81?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E9=94=99=E8=AF=AF=E6=B6=88=E6=81=AF=E9=80=8F?= =?UTF-8?q?=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../services/question-bank.service.ts | 24 ++++++++++++------- web/services/questionBankService.ts | 7 +++++- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/server/src/assessment/services/question-bank.service.ts b/server/src/assessment/services/question-bank.service.ts index a867f9f..2e72e94 100644 --- a/server/src/assessment/services/question-bank.service.ts +++ b/server/src/assessment/services/question-bank.service.ts @@ -2,6 +2,7 @@ import { Injectable, NotFoundException, ForbiddenException, + BadRequestException, Logger, } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; @@ -87,15 +88,20 @@ export class QuestionBankService { tenantId: string | null, ): Promise { if (!createDto.name || !createDto.name.trim()) { - throw new Error('Question bank name is required'); + throw new BadRequestException('Question bank name is required'); } - const bank = this.bankRepository.create({ - ...createDto, + const bankData: any = { + name: createDto.name, + description: createDto.description || '', createdBy: userId, tenantId: tenantId || null, status: QuestionBankStatus.DRAFT, - }); - return this.bankRepository.save(bank); + }; + if (createDto.templateId) { + bankData.template = { id: createDto.templateId }; + } + const bank = this.bankRepository.create(bankData as any); + return this.bankRepository.save(bank as unknown as QuestionBank); } async findAll( @@ -211,7 +217,7 @@ export class QuestionBankService { createDto: CreateQuestionBankItemDto, ): Promise { if (!createDto.questionText || !createDto.questionText.trim()) { - throw new Error('Question text is required'); + throw new BadRequestException('Question text is required'); } await this.findOne(bankId); const item = this.itemRepository.create({ @@ -261,11 +267,11 @@ export class QuestionBankService { const bank = await this.findOne(bankId); if (count <= 0 || count > 50) { - throw new Error('生成数量必须在 1-50 之间'); + throw new BadRequestException('生成数量必须在 1-50 之间'); } if (!knowledgeBaseContent || knowledgeBaseContent.trim().length < 10) { - throw new Error('知识库内容太短,无法生成有效题目'); + throw new BadRequestException('知识库内容太短,无法生成有效题目'); } this.logger.log(`[generateQuestions] Starting AI generation for bank ${bankId}, count: ${count}`); @@ -316,7 +322,7 @@ export class QuestionBankService { let parsedQuestions = safeParseJson(response.content as string); if (!parsedQuestions) { this.logger.error('[generateQuestions] Failed to parse JSON from AI response'); - throw new Error('Invalid JSON format from AI'); + throw new BadRequestException('Invalid JSON format from AI'); } if (!Array.isArray(parsedQuestions)) { diff --git a/web/services/questionBankService.ts b/web/services/questionBankService.ts index b659a7a..bc1e617 100644 --- a/web/services/questionBankService.ts +++ b/web/services/questionBankService.ts @@ -146,7 +146,12 @@ export const questionBankService = { headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ count, knowledgeBaseContent }), }); - if (!response.ok) throw new Error('Failed to generate questions'); + if (!response.ok) { + const errBody = await response.text().catch(() => ''); + let msg = 'Failed to generate questions'; + try { const parsed = JSON.parse(errBody); if (parsed.message) msg = parsed.message; } catch {} + throw new Error(msg); + } return await response.json(); },