Skip to content

Commit

Permalink
reafactor: grading long problem 제거
Browse files Browse the repository at this point in the history
  • Loading branch information
ekzm8523 committed Dec 29, 2023
1 parent eb15cc2 commit c32cab1
Show file tree
Hide file tree
Showing 19 changed files with 2 additions and 336 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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<LongProblemGradingHistoryDto> {
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,
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -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
Original file line number Diff line number Diff line change
@@ -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(
Expand Down
Original file line number Diff line number Diff line change
@@ -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(
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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(
Expand Down
Original file line number Diff line number Diff line change
@@ -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

Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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")
Expand Down
3 changes: 1 addition & 2 deletions src/main/kotlin/io/csbroker/apiserver/model/UserAnswer.kt
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Loading

0 comments on commit c32cab1

Please sign in to comment.