diff --git a/src/main/kotlin/io/csbroker/apiserver/common/enums/GradingStandardType.kt b/src/main/kotlin/io/csbroker/apiserver/common/enums/GradingStandardType.kt deleted file mode 100644 index ff73472d..00000000 --- a/src/main/kotlin/io/csbroker/apiserver/common/enums/GradingStandardType.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.csbroker.apiserver.common.enums - -enum class GradingStandardType { - KEYWORD, CONTENT -} diff --git a/src/main/kotlin/io/csbroker/apiserver/controller/v1/problem/LongProblemController.kt b/src/main/kotlin/io/csbroker/apiserver/controller/v1/problem/LongProblemController.kt index 87abbc67..2dcd4724 100644 --- a/src/main/kotlin/io/csbroker/apiserver/controller/v1/problem/LongProblemController.kt +++ b/src/main/kotlin/io/csbroker/apiserver/controller/v1/problem/LongProblemController.kt @@ -5,10 +5,8 @@ import io.csbroker.apiserver.common.util.getEmailFromSecurityContextHolder import io.csbroker.apiserver.controller.v2.problem.request.SubmitLongProblemDto import io.csbroker.apiserver.controller.v2.problem.response.SubmitLongProblemResponseDto import io.csbroker.apiserver.dto.common.ApiResponse -import io.csbroker.apiserver.dto.problem.grade.LongProblemGradingRequestDto import io.csbroker.apiserver.dto.problem.longproblem.LongProblemAnswerDto import io.csbroker.apiserver.dto.problem.longproblem.LongProblemDetailResponseDto -import io.csbroker.apiserver.dto.problem.longproblem.LongProblemGradingHistoryDto import io.csbroker.apiserver.model.User import io.csbroker.apiserver.service.post.PostService import io.csbroker.apiserver.service.problem.LongProblemService @@ -17,7 +15,6 @@ import org.springframework.web.bind.annotation.PathVariable import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RequestMapping -import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.bind.annotation.RestController @RestController @@ -33,23 +30,6 @@ class LongProblemController( return ApiResponse.success(findProblemDetail) } - @PostMapping("/{id}/grade") - fun gradeLongProblem( - @LoginUser loginUser: User, - @PathVariable("id") id: Long, - @RequestBody answerDto: LongProblemAnswerDto, - @RequestParam("isGrading", required = false) isGrading: Boolean?, - ): ApiResponse { - val gradingRequestDto = LongProblemGradingRequestDto( - loginUser.email, - id, - answerDto.answer, - isGrading ?: true, - ) - val gradeHistory = longProblemService.gradingProblem(gradingRequestDto) - return ApiResponse.success(gradeHistory) - } - @PostMapping("{id}/submit") fun submitLongProblem( @LoginUser loginUser: User, diff --git a/src/main/kotlin/io/csbroker/apiserver/dto/problem/grade/GradeResultDto.kt b/src/main/kotlin/io/csbroker/apiserver/dto/problem/grade/GradeResultDto.kt deleted file mode 100644 index 8d0f5376..00000000 --- a/src/main/kotlin/io/csbroker/apiserver/dto/problem/grade/GradeResultDto.kt +++ /dev/null @@ -1,18 +0,0 @@ -package io.csbroker.apiserver.dto.problem.grade - -data class GradeResultDto( - val correctKeywordIds: List, - val predictKeywordPositions: Map> = mapOf(), - val correctContentIds: List = arrayListOf(), -) { - constructor(keywordGradingResponseDto: KeywordGradingResponseDto) : this( - keywordGradingResponseDto.correctKeywords.map { it.id }, - keywordGradingResponseDto.correctKeywords.associate { it.id to it.predictKeywordPosition }, - ) - - constructor(gradingResponseDto: GradingResponseDto) : this( - gradingResponseDto.correctKeywords.map { it.id }, - gradingResponseDto.correctKeywords.associate { it.id to it.predictKeywordPosition }, - gradingResponseDto.correctContents.map { it.id }, - ) -} diff --git a/src/main/kotlin/io/csbroker/apiserver/dto/problem/grade/GradingRequestDto.kt b/src/main/kotlin/io/csbroker/apiserver/dto/problem/grade/GradingRequestDto.kt index 6045bd29..073810ed 100644 --- a/src/main/kotlin/io/csbroker/apiserver/dto/problem/grade/GradingRequestDto.kt +++ b/src/main/kotlin/io/csbroker/apiserver/dto/problem/grade/GradingRequestDto.kt @@ -16,9 +16,3 @@ data class ShortProblemGradingRequestDto( val answer: String, ) : GradingRequestDto -data class LongProblemGradingRequestDto( - val email: String, - val problemId: Long, - val answer: String, - val isGrading: Boolean, -) : GradingRequestDto diff --git a/src/main/kotlin/io/csbroker/apiserver/dto/problem/grade/KeywordGradingRequestDto.kt b/src/main/kotlin/io/csbroker/apiserver/dto/problem/grade/KeywordGradingRequestDto.kt index b46dd36f..0c31e69e 100644 --- a/src/main/kotlin/io/csbroker/apiserver/dto/problem/grade/KeywordGradingRequestDto.kt +++ b/src/main/kotlin/io/csbroker/apiserver/dto/problem/grade/KeywordGradingRequestDto.kt @@ -1,7 +1,6 @@ package io.csbroker.apiserver.dto.problem.grade import com.fasterxml.jackson.annotation.JsonProperty -import io.csbroker.apiserver.common.enums.GradingStandardType import io.csbroker.apiserver.model.LongProblem data class KeywordGradingRequestDto( diff --git a/src/main/kotlin/io/csbroker/apiserver/dto/problem/grade/LongProblemGradingRequestToAiServerDto.kt b/src/main/kotlin/io/csbroker/apiserver/dto/problem/grade/LongProblemGradingRequestToAiServerDto.kt index dffb026f..68cc542c 100644 --- a/src/main/kotlin/io/csbroker/apiserver/dto/problem/grade/LongProblemGradingRequestToAiServerDto.kt +++ b/src/main/kotlin/io/csbroker/apiserver/dto/problem/grade/LongProblemGradingRequestToAiServerDto.kt @@ -1,7 +1,6 @@ package io.csbroker.apiserver.dto.problem.grade import com.fasterxml.jackson.annotation.JsonProperty -import io.csbroker.apiserver.common.enums.GradingStandardType import io.csbroker.apiserver.model.LongProblem data class LongProblemGradingRequestToAiServerDto( diff --git a/src/main/kotlin/io/csbroker/apiserver/dto/problem/longproblem/ContentDto.kt b/src/main/kotlin/io/csbroker/apiserver/dto/problem/longproblem/ContentDto.kt deleted file mode 100644 index 86effb2d..00000000 --- a/src/main/kotlin/io/csbroker/apiserver/dto/problem/longproblem/ContentDto.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.csbroker.apiserver.dto.problem.longproblem - -class ContentDto( - val id: Long, - val content: String, - val isExist: Boolean = false, -) diff --git a/src/main/kotlin/io/csbroker/apiserver/dto/problem/longproblem/KeywordDto.kt b/src/main/kotlin/io/csbroker/apiserver/dto/problem/longproblem/KeywordDto.kt deleted file mode 100644 index 45ce23fc..00000000 --- a/src/main/kotlin/io/csbroker/apiserver/dto/problem/longproblem/KeywordDto.kt +++ /dev/null @@ -1,8 +0,0 @@ -package io.csbroker.apiserver.dto.problem.longproblem - -data class KeywordDto( - val id: Long, - val content: String, - val isExist: Boolean = false, - val idx: List = listOf(), -) diff --git a/src/main/kotlin/io/csbroker/apiserver/dto/problem/longproblem/LongProblemGradingHistoryDto.kt b/src/main/kotlin/io/csbroker/apiserver/dto/problem/longproblem/LongProblemGradingHistoryDto.kt deleted file mode 100644 index 23209554..00000000 --- a/src/main/kotlin/io/csbroker/apiserver/dto/problem/longproblem/LongProblemGradingHistoryDto.kt +++ /dev/null @@ -1,60 +0,0 @@ -package io.csbroker.apiserver.dto.problem.longproblem - -import io.csbroker.apiserver.model.LongProblem - -data class LongProblemGradingHistoryDto( - val gradingHistoryId: Long, - val problemId: Long, - val title: String, - val tags: List, - val description: String, - val avgScore: Double?, - val topScore: Double?, - val bottomScore: Double?, - val totalSubmission: Int, - val score: Double, - val keywords: List, - val contents: List, - val userAnswer: String, - val standardAnswer: String, -) { - - companion object { - fun createDto( - gradingHistoryId: Long, - problem: LongProblem, - userAnswer: String, - score: Double, - keywords: List, - contents: List, - standardAnswer: String, - ): LongProblemGradingHistoryDto { - val tags = problem.problemTags.map { - it.tag - }.map { - it.name - } - - val scoreList = problem.gradingHistory.map { - it.score - }.toList().sorted() - - return LongProblemGradingHistoryDto( - gradingHistoryId, - problem.id, - problem.title, - tags, - problem.description, - if (scoreList.isEmpty()) null else scoreList.average(), - if (scoreList.isEmpty()) null else scoreList.last(), - if (scoreList.isEmpty()) null else scoreList.first(), - scoreList.size, - score, - keywords, - contents, - userAnswer, - standardAnswer, - ) - } - } -} diff --git a/src/main/kotlin/io/csbroker/apiserver/dto/problem/longproblem/LongProblemUpsertRequestDto.kt b/src/main/kotlin/io/csbroker/apiserver/dto/problem/longproblem/LongProblemUpsertRequestDto.kt index b6c4c966..07d2f235 100644 --- a/src/main/kotlin/io/csbroker/apiserver/dto/problem/longproblem/LongProblemUpsertRequestDto.kt +++ b/src/main/kotlin/io/csbroker/apiserver/dto/problem/longproblem/LongProblemUpsertRequestDto.kt @@ -1,6 +1,5 @@ package io.csbroker.apiserver.dto.problem.longproblem -import io.csbroker.apiserver.common.enums.GradingStandardType import io.csbroker.apiserver.model.GradingStandard import io.csbroker.apiserver.model.LongProblem import io.csbroker.apiserver.model.User diff --git a/src/main/kotlin/io/csbroker/apiserver/dto/user/GradingStandardResponseDto.kt b/src/main/kotlin/io/csbroker/apiserver/dto/user/GradingStandardResponseDto.kt index 7b44a264..b023fae4 100644 --- a/src/main/kotlin/io/csbroker/apiserver/dto/user/GradingStandardResponseDto.kt +++ b/src/main/kotlin/io/csbroker/apiserver/dto/user/GradingStandardResponseDto.kt @@ -1,6 +1,5 @@ package io.csbroker.apiserver.dto.user -import io.csbroker.apiserver.common.enums.GradingStandardType import io.csbroker.apiserver.model.GradingStandard data class GradingStandardResponseDto( diff --git a/src/main/kotlin/io/csbroker/apiserver/dto/useranswer/UserAnswerResponseDto.kt b/src/main/kotlin/io/csbroker/apiserver/dto/useranswer/UserAnswerResponseDto.kt index f591093b..3df91c13 100644 --- a/src/main/kotlin/io/csbroker/apiserver/dto/useranswer/UserAnswerResponseDto.kt +++ b/src/main/kotlin/io/csbroker/apiserver/dto/useranswer/UserAnswerResponseDto.kt @@ -1,6 +1,5 @@ package io.csbroker.apiserver.dto.useranswer -import io.csbroker.apiserver.common.enums.GradingStandardType import io.csbroker.apiserver.dto.user.GradingStandardResponseDto import io.csbroker.apiserver.model.UserAnswer diff --git a/src/main/kotlin/io/csbroker/apiserver/model/GradingStandard.kt b/src/main/kotlin/io/csbroker/apiserver/model/GradingStandard.kt index 2d38fe0f..996caa6f 100644 --- a/src/main/kotlin/io/csbroker/apiserver/model/GradingStandard.kt +++ b/src/main/kotlin/io/csbroker/apiserver/model/GradingStandard.kt @@ -1,6 +1,5 @@ package io.csbroker.apiserver.model -import io.csbroker.apiserver.common.enums.GradingStandardType import jakarta.persistence.CascadeType import jakarta.persistence.Column import jakarta.persistence.Entity @@ -17,7 +16,7 @@ import jakarta.persistence.Table @Entity @Table(name = "grading_standard") -class GradingStandard( +class GradingStandard( // Todo : 제거 예정 @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "grading_standard_id") diff --git a/src/main/kotlin/io/csbroker/apiserver/model/UserAnswer.kt b/src/main/kotlin/io/csbroker/apiserver/model/UserAnswer.kt index 66627b53..a1d89279 100644 --- a/src/main/kotlin/io/csbroker/apiserver/model/UserAnswer.kt +++ b/src/main/kotlin/io/csbroker/apiserver/model/UserAnswer.kt @@ -1,6 +1,5 @@ package io.csbroker.apiserver.model -import io.csbroker.apiserver.common.enums.GradingStandardType import io.csbroker.apiserver.dto.useranswer.UserAnswerSearchResponseDto.UserAnswerDataDto import jakarta.persistence.CascadeType import jakarta.persistence.Column @@ -16,7 +15,7 @@ import jakarta.persistence.Table @Entity @Table(name = "user_answer") -class UserAnswer( +class UserAnswer( // Todo : 제거 예정 @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "user_answer_id") diff --git a/src/main/kotlin/io/csbroker/apiserver/service/problem/LongProblemService.kt b/src/main/kotlin/io/csbroker/apiserver/service/problem/LongProblemService.kt index 77a26950..dd493f86 100644 --- a/src/main/kotlin/io/csbroker/apiserver/service/problem/LongProblemService.kt +++ b/src/main/kotlin/io/csbroker/apiserver/service/problem/LongProblemService.kt @@ -4,10 +4,8 @@ import io.csbroker.apiserver.controller.v2.problem.request.SubmitLongProblemDto import io.csbroker.apiserver.controller.v2.problem.response.SubmitLongProblemResponseDto import io.csbroker.apiserver.dto.problem.grade.LongProblemGradingRequestDto import io.csbroker.apiserver.dto.problem.longproblem.LongProblemDetailResponseDto -import io.csbroker.apiserver.dto.problem.longproblem.LongProblemGradingHistoryDto interface LongProblemService { fun findProblemById(id: Long, email: String?): LongProblemDetailResponseDto - fun gradingProblem(gradingRequest: LongProblemGradingRequestDto): LongProblemGradingHistoryDto fun submitProblem(submitRequest: SubmitLongProblemDto): SubmitLongProblemResponseDto } diff --git a/src/main/kotlin/io/csbroker/apiserver/service/problem/LongProblemServiceImpl.kt b/src/main/kotlin/io/csbroker/apiserver/service/problem/LongProblemServiceImpl.kt index 87878dc2..be2a33cb 100644 --- a/src/main/kotlin/io/csbroker/apiserver/service/problem/LongProblemServiceImpl.kt +++ b/src/main/kotlin/io/csbroker/apiserver/service/problem/LongProblemServiceImpl.kt @@ -2,22 +2,14 @@ package io.csbroker.apiserver.service.problem import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import io.csbroker.apiserver.common.client.AIServerClient -import io.csbroker.apiserver.common.enums.ErrorCode -import io.csbroker.apiserver.common.enums.GradingStandardType import io.csbroker.apiserver.common.enums.LikeType import io.csbroker.apiserver.common.exception.EntityNotFoundException -import io.csbroker.apiserver.common.exception.InternalServiceException import io.csbroker.apiserver.common.util.log import io.csbroker.apiserver.controller.v2.problem.request.SubmitLongProblemDto import io.csbroker.apiserver.controller.v2.problem.response.SubmitLongProblemResponseDto -import io.csbroker.apiserver.dto.problem.grade.GradeResultDto import io.csbroker.apiserver.dto.problem.grade.KeywordGradingRequestDto -import io.csbroker.apiserver.dto.problem.grade.LongProblemGradingRequestDto import io.csbroker.apiserver.dto.problem.grade.LongProblemGradingRequestToAiServerDto -import io.csbroker.apiserver.dto.problem.longproblem.ContentDto -import io.csbroker.apiserver.dto.problem.longproblem.KeywordDto import io.csbroker.apiserver.dto.problem.longproblem.LongProblemDetailResponseDto -import io.csbroker.apiserver.dto.problem.longproblem.LongProblemGradingHistoryDto import io.csbroker.apiserver.model.GradingHistory import io.csbroker.apiserver.model.LongProblem import io.csbroker.apiserver.model.UserAnswer @@ -48,102 +40,6 @@ class LongProblemServiceImpl( ?: throw EntityNotFoundException("${id}번 문제를 찾을 수 없습니다.") } - @Transactional - override fun gradingProblem(gradingRequest: LongProblemGradingRequestDto): LongProblemGradingHistoryDto { - // get entities - val (email, problemId, answer, isGrading) = gradingRequest - val findUser = userRepository.findByEmail(email) - ?: throw EntityNotFoundException("$email 을 가진 유저는 존재하지 않습니다.") - - val findProblem = longProblemRepository.findByIdOrNull(problemId) - ?: throw EntityNotFoundException("${problemId}번 문제는 존재하지 않는 서술형 문제입니다.") - - // check score - val gradeResultDto = when (isGrading) { - true -> getCorrectStandards(findProblem, answer) - false -> GradeResultDto( - correctKeywordIds = emptyList(), - ) - } - var userGradedScore = 0.0 - - // get keywords - val correctKeywordListDto = gradeResultDto.correctKeywordIds.map { - val keyword = findProblem.gradingStandards.find { gs -> gs.id == it } - ?: throw EntityNotFoundException("${it}번 채점 기준을 찾을 수 없습니다.") - if (keyword.type != GradingStandardType.KEYWORD) { - throw InternalServiceException( - ErrorCode.CONDITION_NOT_FULFILLED, - "${it}번 기준은 키워드 채점 기준이 아닙니다.", - ) - } - userGradedScore += keyword.score - KeywordDto( - keyword.id, - keyword.content, - true, - gradeResultDto.predictKeywordPositions[it] - ?: throw EntityNotFoundException("키워드 위치를 찾을 수 없습니다."), - ) - }.toList() - - val notCorrectKeywordListDto = findProblem.gradingStandards.filter { - it.type == GradingStandardType.KEYWORD && it.id !in gradeResultDto.correctKeywordIds - }.map { - KeywordDto(it.id, it.content) - }.toList() - - // get score from content standards - val correctContentListDto = findProblem.gradingStandards.filter { - it.id in gradeResultDto.correctContentIds - }.map { - if (it.type != GradingStandardType.CONTENT) { - throw InternalServiceException( - ErrorCode.CONDITION_NOT_FULFILLED, - "${it.id}번 기준은 내용 채점 기준이 아닙니다.", - ) - } - userGradedScore += it.score - ContentDto(it.id, it.content, true) - } - - val notCorrectContentListDto = findProblem.gradingStandards.filter { - it.type == GradingStandardType.CONTENT && it.id !in gradeResultDto.correctContentIds - }.map { - ContentDto(it.id, it.content) - }.toList() - - if (correctContentListDto.size != gradeResultDto.correctContentIds.size) { - throw EntityNotFoundException("채점 기준을 찾을 수 없습니다.") - } - - // create user-answer - val userAnswer = UserAnswer(answer = answer, problem = findProblem) - userAnswerRepository.save(userAnswer) - - // create grading-history - val gradingHistory = GradingHistory( - problem = findProblem, - user = findUser, - userAnswer = answer, - score = userGradedScore, - ) - gradingHistoryRepository.save(gradingHistory) - - val standardAnswers = standardAnswerRepository.findAllByLongProblem(findProblem).map { it.content } - - // create dto - return LongProblemGradingHistoryDto.createDto( - gradingHistoryId = gradingHistory.gradingHistoryId, - problem = findProblem, - userAnswer = answer, - score = userGradedScore, - keywords = correctKeywordListDto + notCorrectKeywordListDto, - contents = correctContentListDto + notCorrectContentListDto, - standardAnswer = standardAnswers.random(), - ) - } - @Transactional override fun submitProblem(submitRequest: SubmitLongProblemDto): SubmitLongProblemResponseDto { val (user, problemId, answer) = submitRequest diff --git a/src/test/kotlin/io/csbroker/apiserver/controller/v1/admin/problem/AdminLongProblemControllerTest.kt b/src/test/kotlin/io/csbroker/apiserver/controller/v1/admin/problem/AdminLongProblemControllerTest.kt index d64b0a83..65fb2ca1 100644 --- a/src/test/kotlin/io/csbroker/apiserver/controller/v1/admin/problem/AdminLongProblemControllerTest.kt +++ b/src/test/kotlin/io/csbroker/apiserver/controller/v1/admin/problem/AdminLongProblemControllerTest.kt @@ -1,6 +1,5 @@ package io.csbroker.apiserver.controller.v1.admin.problem -import io.csbroker.apiserver.common.enums.GradingStandardType import io.csbroker.apiserver.controller.RestDocsTest import io.csbroker.apiserver.dto.problem.longproblem.LongProblemResponseDto import io.csbroker.apiserver.dto.problem.longproblem.LongProblemSearchResponseDto diff --git a/src/test/kotlin/io/csbroker/apiserver/controller/v1/admin/problem/AdminUserAnswerProblemControllerTest.kt b/src/test/kotlin/io/csbroker/apiserver/controller/v1/admin/problem/AdminUserAnswerProblemControllerTest.kt index 71a26a9e..ce1d31a2 100644 --- a/src/test/kotlin/io/csbroker/apiserver/controller/v1/admin/problem/AdminUserAnswerProblemControllerTest.kt +++ b/src/test/kotlin/io/csbroker/apiserver/controller/v1/admin/problem/AdminUserAnswerProblemControllerTest.kt @@ -1,6 +1,5 @@ package io.csbroker.apiserver.controller.v1.admin.problem -import io.csbroker.apiserver.common.enums.GradingStandardType import io.csbroker.apiserver.controller.RestDocsTest import io.csbroker.apiserver.dto.user.GradingStandardResponseDto import io.csbroker.apiserver.dto.useranswer.AssignUserAnswerDto diff --git a/src/test/kotlin/io/csbroker/apiserver/controller/v1/problem/LongProblemControllerTest.kt b/src/test/kotlin/io/csbroker/apiserver/controller/v1/problem/LongProblemControllerTest.kt index ee43c53e..7a8ad7e7 100644 --- a/src/test/kotlin/io/csbroker/apiserver/controller/v1/problem/LongProblemControllerTest.kt +++ b/src/test/kotlin/io/csbroker/apiserver/controller/v1/problem/LongProblemControllerTest.kt @@ -2,11 +2,8 @@ package io.csbroker.apiserver.controller.v1.problem import io.csbroker.apiserver.controller.RestDocsTest import io.csbroker.apiserver.controller.v2.problem.response.SubmitLongProblemResponseDto -import io.csbroker.apiserver.dto.problem.longproblem.ContentDto -import io.csbroker.apiserver.dto.problem.longproblem.KeywordDto import io.csbroker.apiserver.dto.problem.longproblem.LongProblemAnswerDto import io.csbroker.apiserver.dto.problem.longproblem.LongProblemDetailResponseDto -import io.csbroker.apiserver.dto.problem.longproblem.LongProblemGradingHistoryDto import io.csbroker.apiserver.service.post.PostService import io.csbroker.apiserver.service.problem.LongProblemService import io.mockk.every @@ -117,98 +114,6 @@ class LongProblemControllerTest : RestDocsTest() { ) } - @Test - fun `Long problem 채점`() { - // given - every { longProblemService.gradingProblem(any()) } returns LongProblemGradingHistoryDto( - gradingHistoryId = 1L, - problemId = 1L, - title = "Long problem title", - tags = listOf("tag1", "tag2"), - description = "Long problem description", - avgScore = 10.0, - topScore = 10.0, - bottomScore = 0.0, - score = 10.0, - totalSubmission = 10, - keywords = listOf(KeywordDto(1, "keyword1")), - contents = listOf(ContentDto(1, "content1")), - userAnswer = "정답의 키워드는 test를 포함해야합니다.", - standardAnswer = "정답의 키워드는 test를 포함해야합니다.", - ) - - // when - val result = mockMvc.body( - LongProblemAnswerDto( - answer = "정답의 키워드는 test를 포함해야합니다.", - ), - ).request(Method.POST, "/api/v1/problems/long/{problem_id}/grade?isGrading=true", "1") - - // then - result.then() - .statusCode(200) - .apply( - document( - "problems/long/grade", - preprocessRequest(prettyPrint()), - preprocessResponse(prettyPrint()), - requestHeaders( - headerWithName(HttpHeaders.AUTHORIZATION) - .description("인증을 위한 Access 토큰") - .optional(), - ), - queryParameters( - parameterWithName("isGrading").description("실제 채점 진행 여부 ( default = true )"), - ), - pathParameters( - parameterWithName("problem_id").description("문제 id"), - ), - responseFields( - fieldWithPath("status").type(JsonFieldType.STRING).description("결과 상태"), - fieldWithPath("data.gradingHistoryId").type(JsonFieldType.NUMBER).description("채점 결과 id"), - fieldWithPath("data.problemId").type(JsonFieldType.NUMBER).description("문제 id"), - fieldWithPath("data.title").type(JsonFieldType.STRING) - .description("문제 제목"), - fieldWithPath("data.description").type(JsonFieldType.STRING) - .description("문제 설명"), - fieldWithPath("data.tags").type(JsonFieldType.ARRAY).description("태그"), - fieldWithPath("data.avgScore").type(JsonFieldType.NUMBER) - .description("평균 점수 ( 푼 사람이 없는 경우 null return )").optional(), - fieldWithPath("data.topScore").type(JsonFieldType.NUMBER) - .description("최고 점수 ( 푼 사람이 없는 경우 null return )").optional(), - fieldWithPath("data.bottomScore").type(JsonFieldType.NUMBER) - .description("최저 점수 ( 푼 사람이 없는 경우 null return )").optional(), - fieldWithPath("data.totalSubmission").type(JsonFieldType.NUMBER) - .description("총 제출 수"), - fieldWithPath("data.score").type(JsonFieldType.NUMBER) - .description("채점 된 유저 답안의 점수"), - fieldWithPath("data.userAnswer").type(JsonFieldType.STRING) - .description("채점 된 유저 답안"), - fieldWithPath("data.standardAnswer").type(JsonFieldType.STRING) - .description("문제의 모범 답안"), - fieldWithPath("data.keywords").type(JsonFieldType.ARRAY) - .description("답안에 들어가야하는 키워드"), - fieldWithPath("data.keywords.[].id").type(JsonFieldType.NUMBER) - .description("키워드 id"), - fieldWithPath("data.keywords.[].content").type(JsonFieldType.STRING) - .description("키워드 내용"), - fieldWithPath("data.keywords.[].isExist").type(JsonFieldType.BOOLEAN) - .description("키워드가 유저답안에 존재하는지 유무"), - fieldWithPath("data.keywords.[].idx").type(JsonFieldType.ARRAY) - .description("키워드가 유저답안에 존재 할 때, 시작 index와 끝 index ( 존재하지 않으면 빈 배열 )"), - fieldWithPath("data.contents").type(JsonFieldType.ARRAY) - .description("답안에 들어가야하는 내용 채점 기준"), - fieldWithPath("data.contents.[].id").type(JsonFieldType.NUMBER) - .description("내용 채점 기준 id"), - fieldWithPath("data.contents.[].content").type(JsonFieldType.STRING) - .description("내용 채점 기준 내용"), - fieldWithPath("data.contents.[].isExist").type(JsonFieldType.BOOLEAN) - .description("내용 채점 기준이 유저답안에 존재하는지 유무"), - ), - ), - ) - } - @Test fun `서술형 문제 제출`() { // given