File

apps/recallassess/recallassess-api/src/api/client/knowledge-review/knowledge-review.controller.ts

Prefix

api/client/knowledge-review

Index

Methods

Methods

Async getKnowledgeReview
getKnowledgeReview(learningGroupParticipantId: number, auth: CLAuthData)
Decorators :
@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'})

Get knowledge review quiz for a course enrollment GET /api/client/knowledge-review/enrollment/:learningGroupParticipantId

Parameters :
Name Type Optional
learningGroupParticipantId number No
auth CLAuthData No
Returns : Promise<literal type>
Async getKnowledgeReviewSubmissionStatus
getKnowledgeReviewSubmissionStatus(knowledgeReviewId: number, auth: CLAuthData, courseModulePageId?: string)
Decorators :
@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'})

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 :
Name Type Optional
knowledgeReviewId number No
auth CLAuthData No
courseModulePageId string Yes
Returns : Promise<literal type>
Async submitKnowledgeReview
submitKnowledgeReview(submitDto: SubmitKnowledgeReviewDto, auth: CLAuthData)
Decorators :
@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'})

Submit knowledge review answers POST /api/client/knowledge-review/submit

Parameters :
Name Type Optional
submitDto SubmitKnowledgeReviewDto No
auth CLAuthData No
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);
  }
}

results matching ""

    No results matching ""