11package com .moplus .moplus_server .client .submit .service ;
22
33
4+ import com .moplus .moplus_server .admin .publish .domain .Publish ;
45import com .moplus .moplus_server .client .submit .domain .ChildProblemSubmit ;
56import com .moplus .moplus_server .client .submit .domain .ChildProblemSubmitStatus ;
67import com .moplus .moplus_server .client .submit .domain .ProblemSubmit ;
1718import com .moplus .moplus_server .domain .problem .domain .problem .Problem ;
1819import com .moplus .moplus_server .domain .problem .repository .ChildProblemRepository ;
1920import com .moplus .moplus_server .domain .problem .repository .ProblemRepository ;
21+ import com .moplus .moplus_server .domain .problemset .domain .ProblemSet ;
22+ import com .moplus .moplus_server .domain .problemset .repository .ProblemSetRepository ;
23+ import com .moplus .moplus_server .domain .problemset .service .ProblemSetGetService ;
2024import com .moplus .moplus_server .domain .publish .repository .PublishRepository ;
25+ import com .moplus .moplus_server .statistic .Problem .domain .StatisticEntityTarget ;
26+ import com .moplus .moplus_server .statistic .Problem .service .CountStatisticsGetService ;
27+ import com .moplus .moplus_server .statistic .Problem .service .CountStatisticsUpdateService ;
2128import java .util .List ;
2229import java .util .Optional ;
2330import lombok .RequiredArgsConstructor ;
@@ -33,22 +40,39 @@ public class ClientSubmitService {
3340 private final ChildProblemSubmitRepository childProblemSubmitRepository ;
3441 private final PublishRepository publishRepository ;
3542 private final ChildProblemRepository childProblemRepository ;
43+ private final CountStatisticsUpdateService countStatisticsUpdateService ;
44+ private final ProblemSetGetService problemSetGetService ;
45+ private final ProblemSetRepository problemSetRepository ;
46+ private final CountStatisticsGetService countStatisticsGetService ;
47+
48+ private static Long getFirstProblemInProblemSet (ProblemSet problemSet ) {
49+ return problemSet .getProblemIds ().get (0 );
50+ }
3651
3752 @ Transactional
3853 public void createProblemSubmit (Long memberId , ProblemSubmitCreateRequest request ) {
3954
4055 // 존재하는 발행인지 검증
41- publishRepository .existsByIdElseThrow (request .publishId ());
56+ Publish publish = publishRepository .findByIdElseThrow (request .publishId ());
4257 // 존재하는 문항인지 검증
4358 problemRepository .existsByIdElseThrow (request .problemId ());
4459
4560 // 제출이력이 없을때만 생성
46- Optional <ProblemSubmit > existingProblemSubmit = problemSubmitRepository .findByMemberIdAndPublishIdAndProblemId (memberId ,
61+ Optional <ProblemSubmit > existingProblemSubmit = problemSubmitRepository .findByMemberIdAndPublishIdAndProblemId (
62+ memberId ,
4763 request .publishId (), request .problemId ());
4864 if (existingProblemSubmit .isEmpty ()) {
4965 ProblemSubmit problemSubmit = request .toEntity (memberId );
5066 problemSubmitRepository .save (problemSubmit );
5167 }
68+
69+ //문제 풀이 통계 업데이트
70+ countStatisticsUpdateService .createStatistics (request .problemId (), StatisticEntityTarget .PROBLEM );
71+ ProblemSet problemSet = problemSetRepository .findByIdElseThrow (publish .getProblemSetId ());
72+ if (getFirstProblemInProblemSet (problemSet ).equals (request .problemId ())) {
73+ //TODO: 현재는 첫번째 문항을 풀었을 때 set 풀이 count가 올라가지만 나중에는 어떤 문제를 풀든 첫 문제를 풀면 count가 올라가야해요
74+ countStatisticsUpdateService .createStatistics (publish .getProblemSetId (), StatisticEntityTarget .PROBLEM_SET );
75+ }
5276 }
5377
5478 @ Transactional
@@ -80,7 +104,8 @@ public void createChildProblemSubmit(Long memberId, ChildProblemSubmitCreateRequ
80104 problemRepository .existsByIdElseThrow (request .problemId ());
81105
82106 // 문항제출 이력이 없으면 문항제출 생성
83- Optional <ProblemSubmit > existingProblemSubmit = problemSubmitRepository .findByMemberIdAndPublishIdAndProblemId (memberId ,
107+ Optional <ProblemSubmit > existingProblemSubmit = problemSubmitRepository .findByMemberIdAndPublishIdAndProblemId (
108+ memberId ,
84109 request .publishId (), request .problemId ());
85110 if (existingProblemSubmit .isEmpty ()) {
86111 ProblemSubmit problemSubmit = ProblemSubmit .builder ()
@@ -100,7 +125,8 @@ public void createChildProblemSubmit(Long memberId, ChildProblemSubmitCreateRequ
100125 for (ChildProblem childProblem : childProblems ) {
101126 Long childProblemId = childProblem .getId ();
102127
103- Optional <ChildProblemSubmit > existingChildProblemSubmit = childProblemSubmitRepository .findByMemberIdAndPublishIdAndChildProblemId (memberId ,
128+ Optional <ChildProblemSubmit > existingChildProblemSubmit = childProblemSubmitRepository .findByMemberIdAndPublishIdAndChildProblemId (
129+ memberId ,
104130 request .publishId (), childProblemId );
105131 if (existingChildProblemSubmit .isEmpty ()) {
106132 ChildProblemSubmit childProblemSubmit = ChildProblemSubmit .builder ()
@@ -115,7 +141,8 @@ public void createChildProblemSubmit(Long memberId, ChildProblemSubmitCreateRequ
115141 }
116142
117143 @ Transactional
118- public ChildProblemSubmitUpdateResponse updateChildProblemSubmit (Long memberId , ChildProblemSubmitUpdateRequest request ) {
144+ public ChildProblemSubmitUpdateResponse updateChildProblemSubmit (Long memberId ,
145+ ChildProblemSubmitUpdateRequest request ) {
119146
120147 // 존재하는 발행인지 검증
121148 publishRepository .existsByIdElseThrow (request .publishId ());
@@ -124,10 +151,12 @@ public ChildProblemSubmitUpdateResponse updateChildProblemSubmit(Long memberId,
124151 ChildProblem childProblem = childProblemRepository .findByIdElseThrow (request .childProblemId ());
125152
126153 //새끼문항 제출 데이터 조회
127- ChildProblemSubmit childProblemSubmit = childProblemSubmitRepository .findByMemberIdAndPublishIdAndChildProblemIdElseThrow (memberId ,
154+ ChildProblemSubmit childProblemSubmit = childProblemSubmitRepository .findByMemberIdAndPublishIdAndChildProblemIdElseThrow (
155+ memberId ,
128156 request .publishId (), request .childProblemId ());
129157 // 제출한 답안에 대한 상태 결정
130- ChildProblemSubmitStatus status = ChildProblemSubmitStatus .determineStatus (childProblemSubmit .getStatus (), request .answer (),
158+ ChildProblemSubmitStatus status = ChildProblemSubmitStatus .determineStatus (childProblemSubmit .getStatus (),
159+ request .answer (),
131160 childProblem .getAnswer ());
132161
133162 childProblemSubmit .updateStatus (status );
@@ -144,7 +173,8 @@ public void updateChildProblemSubmitIncorrect(Long memberId, ChildProblemSubmitU
144173 ChildProblem childProblem = childProblemRepository .findByIdElseThrow (request .childProblemId ());
145174
146175 //새끼문항 제출 데이터 조회
147- ChildProblemSubmit childProblemSubmit = childProblemSubmitRepository .findByMemberIdAndPublishIdAndChildProblemIdElseThrow (memberId ,
176+ ChildProblemSubmit childProblemSubmit = childProblemSubmitRepository .findByMemberIdAndPublishIdAndChildProblemIdElseThrow (
177+ memberId ,
148178 request .publishId (), request .childProblemId ());
149179 // 틀림 처리
150180 childProblemSubmit .updateStatusIncorrect ();
0 commit comments