1
1
package com .moplus .moplus_server .client .submit .service ;
2
2
3
3
4
+ import com .moplus .moplus_server .client .submit .domain .ChildProblemSubmit ;
5
+ import com .moplus .moplus_server .client .submit .domain .ChildProblemSubmitStatus ;
4
6
import com .moplus .moplus_server .client .submit .domain .ProblemSubmit ;
7
+ import com .moplus .moplus_server .client .submit .domain .ProblemSubmitStatus ;
8
+ import com .moplus .moplus_server .client .submit .dto .request .ChildProblemSubmitCreateRequest ;
5
9
import com .moplus .moplus_server .client .submit .dto .request .ProblemSubmitCreateRequest ;
10
+ import com .moplus .moplus_server .client .submit .repository .ChildProblemSubmitRepository ;
6
11
import com .moplus .moplus_server .client .submit .repository .ProblemSubmitRepository ;
12
+ import com .moplus .moplus_server .domain .problem .domain .childProblem .ChildProblem ;
13
+ import com .moplus .moplus_server .domain .problem .domain .problem .Problem ;
14
+ import com .moplus .moplus_server .domain .problem .repository .ProblemRepository ;
15
+ import com .moplus .moplus_server .domain .publish .repository .PublishRepository ;
16
+ import java .util .List ;
7
17
import java .util .Optional ;
8
18
import lombok .RequiredArgsConstructor ;
9
19
import org .springframework .stereotype .Service ;
14
24
public class ClientSubmitService {
15
25
16
26
private final ProblemSubmitRepository problemSubmitRepository ;
27
+ private final ProblemRepository problemRepository ;
28
+ private final ChildProblemSubmitRepository childProblemSubmitRepository ;
29
+ private final PublishRepository publishRepository ;
17
30
18
31
@ Transactional
19
32
public void createProblemSubmit (ProblemSubmitCreateRequest request ) {
20
33
21
34
Long memberId = 1L ;
35
+
36
+ // 존재하는 발행인지 검증
37
+ publishRepository .existsByIdElseThrow (request .publishId ());
38
+
39
+ // 존재하는 문항인지 검증
40
+ problemRepository .existsByIdElseThrow (request .problemId ());
41
+
22
42
// 제출이력이 없을때만 생성
23
43
Optional <ProblemSubmit > existingProblemSubmit = problemSubmitRepository .findByMemberIdAndPublishIdAndProblemId (memberId ,
24
44
request .publishId (), request .problemId ());
@@ -27,4 +47,49 @@ public void createProblemSubmit(ProblemSubmitCreateRequest request) {
27
47
problemSubmitRepository .save (problemSubmit );
28
48
}
29
49
}
50
+
51
+ @ Transactional
52
+ public void createChildProblemSubmit (ChildProblemSubmitCreateRequest request ) {
53
+
54
+ Long memberId = 1L ;
55
+
56
+ // 존재하는 발행인지 검증
57
+ publishRepository .existsByIdElseThrow (request .publishId ());
58
+
59
+ // 존재하는 문항인지 검증
60
+ problemRepository .existsByIdElseThrow (request .problemId ());
61
+
62
+ // 문항제출 이력이 없으면 문항제출 생성
63
+ Optional <ProblemSubmit > existingProblemSubmit = problemSubmitRepository .findByMemberIdAndPublishIdAndProblemId (memberId ,
64
+ request .publishId (), request .problemId ());
65
+ if (existingProblemSubmit .isEmpty ()) {
66
+ ProblemSubmit problemSubmit = ProblemSubmit .builder ()
67
+ .memberId (memberId )
68
+ .publishId (request .publishId ())
69
+ .problemId (request .problemId ())
70
+ .status (ProblemSubmitStatus .IN_PROGRESS )
71
+ .build ();
72
+ problemSubmitRepository .save (problemSubmit );
73
+ }
74
+
75
+ // 문항의 새끼문항 조회
76
+ Problem problem = problemRepository .findByIdElseThrow (request .problemId ());
77
+ List <ChildProblem > childProblems = problem .getChildProblems ();
78
+
79
+ // 제출이력이 없을떄만 생성
80
+ for (ChildProblem childProblem : childProblems ) {
81
+ Long childProblemId = childProblem .getId ();
82
+
83
+ Optional <ChildProblemSubmit > existingChildProblemSubmit = childProblemSubmitRepository .findByMemberIdAndPublishIdAndChildProblemId (memberId ,
84
+ request .publishId (), childProblemId );
85
+ ChildProblemSubmit childProblemSubmit = ChildProblemSubmit .builder ()
86
+ .memberId (memberId )
87
+ .publishId (request .publishId ())
88
+ .childProblemId (childProblemId )
89
+ .status (ChildProblemSubmitStatus .NOT_STARTED )
90
+ .build ();
91
+ childProblemSubmitRepository .save (childProblemSubmit );
92
+ }
93
+ }
94
+
30
95
}
0 commit comments