Skip to content

Commit

Permalink
Feat: readExamResults 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
RinRinPARK committed Oct 6, 2024
1 parent 6b31bb0 commit 07890f1
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import com.swm_standard.phote.dto.GradeExamRequest
import com.swm_standard.phote.dto.GradeExamResponse
import com.swm_standard.phote.dto.ReadExamHistoryDetailResponse
import com.swm_standard.phote.dto.ReadExamHistoryListResponse
import com.swm_standard.phote.dto.ReadExamResultsResponse
import com.swm_standard.phote.service.ExamService
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.Parameter
Expand Down Expand Up @@ -48,6 +49,16 @@ class ExamController(
): BaseResponse<List<ReadExamHistoryListResponse>> =
BaseResponse(msg = "문제풀이 기록 리스트 조회 성공", data = examService.readExamHistoryList(workbookId))

@Operation(summary = "readExamResults", description = "(강사가) 학생들의 시험 결과 목록을 조회")
@SecurityRequirement(name = "bearer Auth")
@GetMapping("/exams/result/{examId}")
fun readExamResults(
@PathVariable(
required = true,
) examId: UUID,
): BaseResponse<ReadExamResultsResponse> =
BaseResponse(msg = "학생 시험 결과 조회 성공", data = examService.readExamResults(examId))

@Operation(summary = "gradeExam", description = "문제풀이 제출 및 채점")
@SecurityRequirement(name = "bearer Auth")
@PostMapping("/exam/{workbookId}")
Expand Down
12 changes: 12 additions & 0 deletions src/main/kotlin/com/swm_standard/phote/dto/ExamDtos.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,18 @@ data class ReadExamHistoryListResponse(
val sequence: Int,
)

data class ReadExamStudentResult(
val userId: UUID,
val name: String,
val score: Int,
)

data class ReadExamResultsResponse(
val examId: UUID,
val totalQuestionCount: Int,
val students: List<ReadExamStudentResult>,
)

data class GradeExamRequest(
val time: Int,
val answers: List<SubmittedAnswerRequest>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ import java.util.UUID

interface ExamResultRepository : JpaRepository<ExamResult, UUID> {
fun findByExamId(examId: UUID): ExamResult?
fun findAllByExamId(examId: UUID): List<ExamResult>
}
20 changes: 20 additions & 0 deletions src/main/kotlin/com/swm_standard/phote/service/ExamService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import com.swm_standard.phote.dto.GradeExamResponse
import com.swm_standard.phote.dto.ReadExamHistoryDetail
import com.swm_standard.phote.dto.ReadExamHistoryDetailResponse
import com.swm_standard.phote.dto.ReadExamHistoryListResponse
import com.swm_standard.phote.dto.ReadExamStudentResult
import com.swm_standard.phote.dto.ReadExamResultsResponse
import com.swm_standard.phote.dto.SubmittedAnswerRequest
import com.swm_standard.phote.entity.Answer
import com.swm_standard.phote.entity.Category
Expand Down Expand Up @@ -54,6 +56,7 @@ class ExamService(
@Value("\${openai.api.url}")
lateinit var url: String

@Transactional(readOnly = true)
fun readExamHistoryDetail(id: UUID): ReadExamHistoryDetailResponse {
val examResult = examResultRepository.findByExamId(id) ?: throw NotFoundException(fieldName = "examResult")
val responses =
Expand Down Expand Up @@ -87,6 +90,7 @@ class ExamService(
)
}

@Transactional(readOnly = true)
fun readExamHistoryList(workbookId: UUID): List<ReadExamHistoryListResponse> {
val exams = examRepository.findAllByWorkbookId(workbookId)
return exams.map { exam ->
Expand All @@ -104,6 +108,22 @@ class ExamService(
}
}

@Transactional(readOnly = true)
fun readExamResults(examId: UUID): ReadExamResultsResponse {
val exam = examRepository.findById(examId).orElseThrow { NotFoundException(fieldName = "examId") }
val examResults = examResultRepository.findAllByExamId(examId)

val responses = examResults.map { examResult ->
ReadExamStudentResult(
examResult.member.id,
examResult.member.name,
examResult.totalCorrect
)
}

return ReadExamResultsResponse(examId, exam.workbook.quantity, responses)
}

@Transactional
fun gradeExam(
workbookId: UUID,
Expand Down

0 comments on commit 07890f1

Please sign in to comment.