@@ -3,10 +3,12 @@ package com.solve.domain.problem.service.impl
33import com.solve.domain.problem.domain.entity.ProblemCode
44import com.solve.domain.problem.dto.request.ProblemCodeCreateRequest
55import com.solve.domain.problem.dto.response.ProblemCodeResponse
6+ import com.solve.domain.problem.error.ProblemCodeError
67import com.solve.domain.problem.error.ProblemError
78import com.solve.domain.problem.repository.ProblemCodeRepository
89import com.solve.domain.problem.repository.ProblemRepository
910import com.solve.domain.problem.service.ProblemCodeService
11+ import com.solve.global.common.enums.ProgrammingLanguage
1012import com.solve.global.error.CustomException
1113import com.solve.global.security.holder.SecurityHolder
1214import org.springframework.data.repository.findByIdOrNull
@@ -20,64 +22,55 @@ class ProblemCodeServiceImpl(
2022 private val securityHolder : SecurityHolder
2123) : ProblemCodeService {
2224 @Transactional
23- override fun saveCode (problemId : Long , request : ProblemCodeCreateRequest ) {
25+ override fun saveCode (problemId : Long , language : ProgrammingLanguage , request : ProblemCodeCreateRequest ) {
2426 val problem =
2527 problemRepository.findByIdOrNull(problemId) ? : throw CustomException (
2628 ProblemError .PROBLEM_NOT_FOUND ,
2729 problemId
2830 )
29-
3031 val user = securityHolder.user
32+ val code = problemCodeRepository.findByProblemAndUserAndLanguage(problem, user, language)
3133
32- val problemCode = problemCodeRepository.findByProblemAndUser(problem, user)
33-
34- if (problemCode != null ) {
35- problemCode.code = request.code
36- problemCode.language = request.language
34+ if (code != null ) {
35+ code.code = request.code
3736
38- problemCodeRepository.save(problemCode )
37+ problemCodeRepository.save(code )
3938 } else {
40- val code = ProblemCode (
39+ problemCodeRepository.save( ProblemCode (
4140 code = request.code,
42- language = request. language,
41+ language = language,
4342 problem = problem,
4443 user = user
45- )
46-
47- problemCodeRepository.save(code)
44+ ))
4845 }
4946 }
5047
5148 @Transactional(readOnly = true )
52- override fun getCode (problemId : Long ): ProblemCodeResponse {
49+ override fun getCode (problemId : Long , language : ProgrammingLanguage ): ProblemCodeResponse {
5350 val problem =
5451 problemRepository.findByIdOrNull(problemId) ? : throw CustomException (
5552 ProblemError .PROBLEM_NOT_FOUND ,
5653 problemId
5754 )
58-
5955 val user = securityHolder.user
60-
6156 val code =
62- problemCodeRepository.findByProblemAndUser (problem, user)
63- ? : throw CustomException (ProblemError . PROBLEM_NOT_FOUND )
57+ problemCodeRepository.findByProblemAndUserAndLanguage (problem, user, language )
58+ ? : throw CustomException (ProblemCodeError . PROBLEM_CODE_NOT_FOUND )
6459
6560 return ProblemCodeResponse .of(code)
6661 }
6762
6863 @Transactional
69- override fun deleteCode (problemId : Long ) {
64+ override fun deleteCode (problemId : Long , language : ProgrammingLanguage ) {
7065 val problem =
7166 problemRepository.findByIdOrNull(problemId) ? : throw CustomException (
7267 ProblemError .PROBLEM_NOT_FOUND ,
7368 problemId
7469 )
75-
7670 val user = securityHolder.user
77-
7871 val code =
79- problemCodeRepository.findByProblemAndUser (problem, user)
80- ? : throw CustomException (ProblemError . PROBLEM_NOT_FOUND )
72+ problemCodeRepository.findByProblemAndUserAndLanguage (problem, user, language )
73+ ? : throw CustomException (ProblemCodeError . PROBLEM_CODE_NOT_FOUND )
8174
8275 problemCodeRepository.delete(code)
8376 }
0 commit comments