Skip to content

Commit

Permalink
rewrite the page logic for quiz apis
Browse files Browse the repository at this point in the history
  • Loading branch information
scglwsj committed Sep 25, 2024
1 parent 68ea5b4 commit 5b2f012
Show file tree
Hide file tree
Showing 11 changed files with 312 additions and 550 deletions.
245 changes: 7 additions & 238 deletions api/quiz_ms-quiz-openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,179 +43,6 @@ paths:
'*/*':
schema:
$ref: "#/components/schemas/QuizResponse"
/v1/quizzes/{id}:
get:
summary: "GET v1/quizzes/{id}"
operationId: "getQuiz"
parameters:
- name: "id"
in: "path"
required: true
schema:
type: "integer"
format: "int64"
- name: "pageNumber"
in: "query"
required: true
schema:
type: "integer"
format: "int32"
- name: "pageSize"
in: "query"
required: true
schema:
type: "integer"
format: "int32"
- name: "x-user-id"
in: "header"
required: true
schema:
type: "string"
- name: "x-user-email"
in: "header"
required: true
schema:
type: "string"
- name: "x-user-roles"
in: "header"
required: true
schema:
type: "string"
responses:
"200":
description: "OK"
content:
'*/*':
schema:
$ref: "#/components/schemas/QuizResponse"
/v1/quizzes/me/in-progress:
get:
summary: "GET v1/quizzes/me/in-progress"
operationId: "getInProgressQuiz"
parameters:
- name: "pageNumber"
in: "query"
required: true
schema:
type: "integer"
format: "int32"
- name: "pageSize"
in: "query"
required: true
schema:
type: "integer"
format: "int32"
- name: "x-user-id"
in: "header"
required: true
schema:
type: "string"
- name: "x-user-email"
in: "header"
required: true
schema:
type: "string"
- name: "x-user-roles"
in: "header"
required: true
schema:
type: "string"
responses:
"200":
description: "OK"
content:
'*/*':
schema:
$ref: "#/components/schemas/QuizResponse"
/v1/quizzes/me/completed:
get:
summary: "GET v1/quizzes/me/completed"
operationId: "getCompletedQuiz"
parameters:
- name: "pageNumber"
in: "query"
required: true
schema:
type: "integer"
format: "int32"
- name: "pageSize"
in: "query"
required: true
schema:
type: "integer"
format: "int32"
- name: "x-user-id"
in: "header"
required: true
schema:
type: "string"
- name: "x-user-email"
in: "header"
required: true
schema:
type: "string"
- name: "x-user-roles"
in: "header"
required: true
schema:
type: "string"
responses:
"200":
description: "OK"
content:
'*/*':
schema:
$ref: "#/components/schemas/QuizListResponse"
/v1/quizzes/{id}/mcqs/{mcqId}/attempt:
put:
summary: "PUT v1/quizzes/{id}/mcqs/{mcqId}/attempt"
operationId: "updateAttempt"
parameters:
- name: "id"
in: "path"
required: true
schema:
type: "integer"
format: "int64"
- name: "mcqId"
in: "path"
required: true
schema:
type: "integer"
format: "int64"
- name: "x-user-id"
in: "header"
required: true
schema:
type: "string"
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/AttemptRequest"
required: true
responses:
"204":
description: "No Content"
/v1/quizzes/{id}/abandon:
patch:
summary: "PATCH v1/quizzes/{id}/abandon"
operationId: "abandonQuiz"
parameters:
- name: "id"
in: "path"
required: true
schema:
type: "integer"
format: "int64"
- name: "x-user-id"
in: "header"
required: true
schema:
type: "string"
responses:
"204":
description: "No Content"
components:
schemas:
QuizRequest:
Expand Down Expand Up @@ -271,6 +98,12 @@ components:
MCQResponse:
type: "object"
properties:
attemptOption:
type: "integer"
format: "int32"
attemptOn:
type: "string"
format: "date-time"
id:
type: "integer"
format: "int64"
Expand Down Expand Up @@ -305,22 +138,14 @@ components:
format: "date-time"
createdBy:
type: "string"
attemptOption:
type: "integer"
format: "int32"
attemptOn:
type: "string"
format: "date-time"
QuizResponse:
type: "object"
properties:
id:
type: "integer"
format: "int64"
mcqs:
type: "array"
items:
$ref: "#/components/schemas/MCQResponse"
$ref: "#/components/schemas/MCQResponse"
status:
type: "string"
enum:
Expand All @@ -330,59 +155,3 @@ components:
points:
type: "integer"
format: "int32"
pageNumber:
type: "integer"
format: "int32"
pageSize:
type: "integer"
format: "int32"
totalPages:
type: "integer"
format: "int32"
totalRecords:
type: "integer"
format: "int64"
SimpleQuizResponse:
type: "object"
properties:
id:
type: "integer"
format: "int64"
mcqs:
type: "array"
items:
$ref: "#/components/schemas/MCQResponse"
status:
type: "string"
enum:
- "IN_PROGRESS"
- "COMPLETED"
- "ABANDONED"
points:
type: "integer"
format: "int32"
QuizListResponse:
type: "object"
properties:
pageNumber:
type: "integer"
format: "int32"
pageSize:
type: "integer"
format: "int32"
totalPages:
type: "integer"
format: "int32"
totalRecords:
type: "integer"
format: "int64"
quizzes:
type: "array"
items:
$ref: "#/components/schemas/SimpleQuizResponse"
AttemptRequest:
type: "object"
properties:
attemptOption:
type: "integer"
format: "int32"
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,15 @@

import static org.springframework.http.HttpStatus.NO_CONTENT;

import com.quemistry.quiz_ms.controller.model.QuizAttemptRequest;
import com.quemistry.quiz_ms.controller.model.QuizListResponse;
import com.quemistry.quiz_ms.controller.model.QuizRequest;
import com.quemistry.quiz_ms.controller.model.QuizResponse;
import com.quemistry.quiz_ms.controller.model.*;
import com.quemistry.quiz_ms.model.UserContext;
import com.quemistry.quiz_ms.service.QuizService;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.PositiveOrZero;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;

@Slf4j
Expand Down Expand Up @@ -62,7 +60,7 @@ public QuizResponse getInProgressQuiz(
}

@GetMapping("me/completed")
public QuizListResponse getCompletedQuiz(
public Page<SimpleQuizResponse> getCompletedQuiz(
@RequestHeader("x-user-id") @NotBlank String studentId,
@RequestHeader("x-user-email") @Email String studentEmail,
@RequestHeader("x-user-roles") @NotBlank String roles,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.quemistry.quiz_ms.controller.model;

import com.quemistry.quiz_ms.client.model.MCQDto;
import com.quemistry.quiz_ms.model.QuizAttempt;
import java.util.Date;
import lombok.*;
import lombok.experimental.SuperBuilder;
Expand All @@ -13,4 +14,28 @@
public class MCQResponse extends MCQDto {
private Integer attemptOption;
private Date attemptOn;

public static MCQResponse from(QuizAttempt attempt, MCQDto mcqDto) {
MCQResponseBuilder<?, ?> builder = MCQResponse.builder();
builder
.id(attempt.getMcqId())
.attemptOption(attempt.getOptionNo())
.attemptOn(attempt.getAttemptTime());

if (mcqDto != null) {
builder
.stem(mcqDto.getStem())
.options(mcqDto.getOptions())
.topics(mcqDto.getTopics())
.skills(mcqDto.getSkills())
.status(mcqDto.getStatus())
.publishedOn(mcqDto.getPublishedOn())
.publishedBy(mcqDto.getPublishedBy())
.closedOn(mcqDto.getClosedOn())
.closedBy(mcqDto.getClosedBy())
.createdOn(mcqDto.getCreatedOn())
.createdBy(mcqDto.getCreatedBy());
}
return builder.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,7 @@
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class QuizListResponse {
private Integer pageNumber;
private Integer pageSize;
private Integer totalPages;
private Long totalRecords;
class QuizListResponse {

private List<SimpleQuizResponse> quizzes;
}
Original file line number Diff line number Diff line change
@@ -1,23 +1,19 @@
package com.quemistry.quiz_ms.controller.model;

import com.quemistry.quiz_ms.model.QuizStatus;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.domain.Page;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class QuizResponse {
private Long id;
private List<MCQResponse> mcqs;
private Page<MCQResponse> mcqs;
private QuizStatus status;
private Integer points;
private Integer pageNumber;
private Integer pageSize;
private Integer totalPages;
private Long totalRecords;
}
Loading

0 comments on commit 5b2f012

Please sign in to comment.