apps/recallassess/recallassess-api/src/api/client/knowledge-review/knowledge-review.controller.ts
api/client/knowledge-review
Methods |
|
| Async getKnowledgeReview | |||||||||
getKnowledgeReview(learningGroupParticipantId: number, auth: CLAuthData)
|
|||||||||
Decorators :
@HttpCode(HttpStatus.OK)
|
|||||||||
|
Get knowledge review quiz for a course enrollment GET /api/client/knowledge-review/enrollment/:learningGroupParticipantId
Parameters :
Returns :
Promise<literal type>
|
| Async getKnowledgeReviewSubmissionStatus | ||||||||||||
getKnowledgeReviewSubmissionStatus(knowledgeReviewId: number, auth: CLAuthData, courseModulePageId?: string)
|
||||||||||||
Decorators :
@HttpCode(HttpStatus.OK)
|
||||||||||||
|
Get knowledge review submission status and submitted answers GET /api/client/knowledge-review/:knowledgeReviewId/submission-status?courseModulePageId=123 courseModulePageId is optional: if provided, checks embedded quiz; if omitted, checks standalone KR
Parameters :
Returns :
Promise<literal type>
|
| Async submitKnowledgeReview | |||||||||
submitKnowledgeReview(submitDto: SubmitKnowledgeReviewDto, auth: CLAuthData)
|
|||||||||
Decorators :
@HttpCode(HttpStatus.OK)
|
|||||||||
|
Submit knowledge review answers POST /api/client/knowledge-review/submit
Parameters :
Returns :
Promise<literal type>
|
import { CLAuthData, ClientAuth } from "@api/shared/decorators";
import { Body, Controller, Get, HttpCode, HttpStatus, Param, ParseIntPipe, Post, Query } from "@nestjs/common";
import { ApiOperation, ApiResponse, ApiTags } from "@nestjs/swagger";
import {
CLKnowledgeReviewDto,
CLKnowledgeReviewQuestionDto,
SubmitKnowledgeReviewDto,
} from "./dto";
import { CLKnowledgeReviewService } from "./knowledge-review.service";
@ApiTags("Client - Knowledge Review")
@Controller("api/client/knowledge-review")
export class CLKnowledgeReviewController {
constructor(private readonly knowledgeReviewService: CLKnowledgeReviewService) {}
/**
* Get knowledge review quiz for a course enrollment
* GET /api/client/knowledge-review/enrollment/:learningGroupParticipantId
*/
@HttpCode(HttpStatus.OK)
@Get("enrollment/:learningGroupParticipantId")
@ApiOperation({ summary: "Get knowledge review quiz for a course enrollment" })
@ApiResponse({
status: 200,
description: "Returns knowledge review with questions and answers",
})
@ApiResponse({
status: 404,
description: "Course enrollment or knowledge review not found",
})
async getKnowledgeReview(
@Param("learningGroupParticipantId", ParseIntPipe) learningGroupParticipantId: number,
@ClientAuth() auth: CLAuthData,
): Promise<{
knowledgeReview: CLKnowledgeReviewDto;
questions: CLKnowledgeReviewQuestionDto[];
isCompleted: boolean;
}> {
return this.knowledgeReviewService.getKnowledgeReviewByLearningGroupParticipantId(
learningGroupParticipantId,
auth.participantId,
);
}
/**
* Get knowledge review submission status and submitted answers
* GET /api/client/knowledge-review/:knowledgeReviewId/submission-status?courseModulePageId=123
* courseModulePageId is optional: if provided, checks embedded quiz; if omitted, checks standalone KR
*/
@HttpCode(HttpStatus.OK)
@Get(":knowledgeReviewId/submission-status")
@ApiOperation({ summary: "Get knowledge review submission status and submitted answers" })
@ApiResponse({
status: 200,
description: "Returns submission status and submitted answers if completed",
})
async getKnowledgeReviewSubmissionStatus(
@Param("knowledgeReviewId", ParseIntPipe) knowledgeReviewId: number,
@ClientAuth() auth: CLAuthData,
@Query("courseModulePageId") courseModulePageId?: string,
): Promise<{
isCompleted: boolean;
submittedAnswers?: Record<number, { answerId?: number; answerText?: string }>;
}> {
const pageId = courseModulePageId ? parseInt(courseModulePageId, 10) : undefined;
return this.knowledgeReviewService.getKnowledgeReviewSubmissionStatus(
knowledgeReviewId,
auth.participantId,
pageId,
);
}
/**
* Submit knowledge review answers
* POST /api/client/knowledge-review/submit
*/
@HttpCode(HttpStatus.OK)
@Post("submit")
@ApiOperation({ summary: "Submit knowledge review answers" })
@ApiResponse({
status: 200,
description: "Knowledge review submitted successfully",
})
@ApiResponse({
status: 404,
description: "Knowledge review or course not found",
})
async submitKnowledgeReview(
@Body() submitDto: SubmitKnowledgeReviewDto,
@ClientAuth() auth: CLAuthData,
): Promise<{
success: boolean;
knowledgeReviewParticipantId: number | null;
passed: boolean;
score: number;
passPercentage: number | null;
questionResults: Array<{ questionId: number; isCorrect: boolean }>;
}> {
return this.knowledgeReviewService.submitKnowledgeReview(submitDto, auth.participantId);
}
}