From 176fe2270fa9774a39b88a29fd3459d9fdc37828 Mon Sep 17 00:00:00 2001 From: Developer Date: Wed, 13 May 2026 23:12:03 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=92=8C=E7=94=A8=E6=88=B7=E8=AF=84=E4=BC=B0?= =?UTF-8?q?=E8=AE=B0=E5=BD=95API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - GET /assessment/history: 获取用户评估历史(保留最近100条) - cleanupOldSessions: 保持最多3条记录(在创建新session时自动清理) - 复查记录保留完整历史(reviewHistory) --- .../src/assessment/assessment.controller.ts | 9 ++++++ server/src/assessment/assessment.service.ts | 28 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/server/src/assessment/assessment.controller.ts b/server/src/assessment/assessment.controller.ts index 6266829..f9454f3 100644 --- a/server/src/assessment/assessment.controller.ts +++ b/server/src/assessment/assessment.controller.ts @@ -135,6 +135,15 @@ export class AssessmentController { return this.assessmentService.generateCertificate(sessionId, userId, tenantId); } + @Get('history') + @ApiOperation({ summary: 'Get current user assessment history (keep latest 3)' }) + async getHistory( + @Request() req: any, + ) { + const { id: userId } = req.user; + return this.assessmentService.getUserHistory(userId); + } + @Get('stats') @ApiOperation({ summary: 'Get assessment statistics for admin' }) async getStats( diff --git a/server/src/assessment/assessment.service.ts b/server/src/assessment/assessment.service.ts index 9c34b23..bcfc6f5 100644 --- a/server/src/assessment/assessment.service.ts +++ b/server/src/assessment/assessment.service.ts @@ -553,6 +553,9 @@ private async getModel(tenantId: string): Promise { this.logger.log( `[startSession] Session ${savedSession.id} created and saved`, ); + + this.cleanupOldSessions(userId); + return savedSession; } @@ -1487,4 +1490,29 @@ const initialState: Partial = { return session; } + + async getUserHistory(userId: string): Promise { + const sessions = await this.sessionRepository.find({ + where: { userId, status: AssessmentStatus.COMPLETED }, + order: { createdAt: 'DESC' }, + take: 100, + relations: ['template'], + }); + return sessions; + } + + private async cleanupOldSessions(userId: string): Promise { + const sessions = await this.sessionRepository.find({ + where: { userId }, + order: { createdAt: 'DESC' }, + }); + + if (sessions.length > 3) { + const toDelete = sessions.slice(3); + for (const session of toDelete) { + await this.sessionRepository.remove(session); + } + this.logger.log(`[cleanupOldSessions] Deleted ${toDelete.length} old sessions for user ${userId}`); + } + } }