| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- import { Controller, Post, Body, Get, Param, UseGuards, Request, Sse, MessageEvent, Query } from '@nestjs/common';
- import { map } from 'rxjs/operators';
- import { AssessmentService } from './assessment.service';
- import { CombinedAuthGuard } from '../auth/combined-auth.guard';
- import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger';
- @ApiTags('Assessment')
- @Controller('assessment')
- @UseGuards(CombinedAuthGuard)
- export class AssessmentController {
- constructor(private readonly assessmentService: AssessmentService) { }
- @Post('start')
- @ApiOperation({ summary: 'Start a new assessment session' })
- async startSession(@Request() req: any, @Body() body: { knowledgeBaseId?: string, language?: string, templateId?: string }) {
- const { id: userId, tenantId } = req.user;
- console.log(`[AssessmentController] startSession: user=${userId}, tenant=${tenantId}, templateId=${body.templateId}, kbId=${body.knowledgeBaseId}`);
- return this.assessmentService.startSession(userId, body.knowledgeBaseId, tenantId, body.language, body.templateId);
- }
- @Post(':id/answer')
- @ApiOperation({ summary: 'Submit an answer to the current question' })
- async submitAnswer(
- @Request() req: any,
- @Param('id') sessionId: string,
- @Body() body: { answer: string, language?: string }
- ) {
- const { id: userId } = req.user;
- console.log(`[AssessmentController] submitAnswer: user=${userId}, session=${sessionId}, answerLen=${body.answer?.length}`);
- return this.assessmentService.submitAnswer(sessionId, userId, body.answer, body.language);
- }
- @Sse(':id/start-stream')
- @ApiOperation({ summary: 'Stream initial session generation' })
- startSessionStream(@Request() req: any, @Param('id') sessionId: string) {
- const { id: userId } = req.user;
- console.log(`[AssessmentController] startSessionStream: user=${userId}, session=${sessionId}`);
- return this.assessmentService.startSessionStream(sessionId, userId).pipe(
- map(data => ({ data } as MessageEvent))
- );
- }
- @Sse(':id/answer-stream')
- @ApiOperation({ summary: 'Stream answer evaluation and next question generation' })
- submitAnswerStream(
- @Request() req: any,
- @Param('id') sessionId: string,
- @Query('answer') answer: string,
- @Query('language') language?: string
- ) {
- const { id: userId } = req.user;
- console.log(`[AssessmentController] submitAnswerStream: user=${userId}, session=${sessionId}, lang=${language}`);
- return this.assessmentService.submitAnswerStream(sessionId, userId, answer, language).pipe(
- map(data => ({ data } as MessageEvent))
- );
- }
- @Get(':id/state')
- @ApiOperation({ summary: 'Get the current state of an assessment session' })
- async getSessionState(@Request() req: any, @Param('id') sessionId: string) {
- const { id: userId } = req.user;
- console.log(`[AssessmentController] getSessionState: user=${userId}, session=${sessionId}`);
- return this.assessmentService.getSessionState(sessionId, userId);
- }
- @Get()
- @ApiOperation({ summary: 'Get assessment session history' })
- async getHistory(@Request() req: any) {
- const { id: userId, tenantId } = req.user;
- console.log(`[AssessmentController] getHistory: user=${userId}, tenant=${tenantId}`);
- return this.assessmentService.getHistory(userId, tenantId);
- }
- }
|