@@ -5,27 +5,29 @@ import com.app.server.challenge.ui.usecase.dto.request.ChallengeParticipantDto
55import com.app.server.challenge_certification.application.dto.CertificationDataDto
66import com.app.server.challenge_certification.application.service.constant.EConsecutiveState
77import com.app.server.challenge_certification.ui.dto.UserChallengeIceRequestDto
8- import com.app.server.user_challenge.ui.usecase.UsingIceUseCase
98import com.app.server.common.exception.InternalServerErrorException
109import com.app.server.user_challenge.application.dto.CreateUserChallengeDto
1110import com.app.server.user_challenge.application.dto.ReceiveReportResponseDto
12- import com.app.server.user_challenge.ui.usecase.ParticipantChallengeUseCase
1311import com.app.server.user_challenge.domain.enums.EUserChallengeCertificationStatus
1412import com.app.server.user_challenge.domain.enums.EUserChallengeStatus
13+ import com.app.server.user_challenge.domain.event.ReportCreatedEvent
14+ import com.app.server.user_challenge.domain.event.SavedTodayUserChallengeCertificationEvent
1515import com.app.server.user_challenge.domain.exception.UserChallengeException
1616import com.app.server.user_challenge.domain.model.UserChallenge
1717import com.app.server.user_challenge.domain.model.UserChallengeHistory
1818import com.app.server.user_challenge.enums.EUserChallengeParticipantState
1919import com.app.server.user_challenge.enums.EUserReportResultCode
20- import com.app.server.user_challenge.domain.event.ReportCreatedEvent
21- import com.app.server.user_challenge.domain.event.SavedTodayUserChallengeCertificationEvent
2220import com.app.server.user_challenge.infra.ReportInfraService
2321import com.app.server.user_challenge.ui.dto.SendToReportServerRequestDto
22+ import com.app.server.user_challenge.ui.usecase.ParticipantChallengeUseCase
23+ import com.app.server.user_challenge.ui.usecase.UsingIceUseCase
2424import org.springframework.context.ApplicationEventPublisher
2525import org.springframework.stereotype.Service
26+ import org.springframework.transaction.annotation.Transactional
2627import java.time.LocalDate
2728
2829@Service
30+ @Transactional
2931class UserChallengeCommandService (
3032 private val userChallengeService : UserChallengeService ,
3133 private val challengeService : ChallengeService ,
@@ -103,7 +105,7 @@ class UserChallengeCommandService(
103105 userChallenge.validateIncreaseIceCount()
104106
105107 // 챌린지 종료 여부 확인
106- if (userChallenge.checkIsDone (certificationDto.certificationDate)) {
108+ if (userChallenge.checkIsNotRunning (certificationDto.certificationDate)) {
107109 makeReport(userChallenge)
108110 }
109111
@@ -146,7 +148,7 @@ class UserChallengeCommandService(
146148 when (report.status) {
147149 EUserReportResultCode .RECEIVE_REPORT_SUCCESS -> {
148150 userChallenge.updateReportMessage(report.message)
149- updateUserChallengeStatusToPending( userChallenge)
151+ userChallenge.updateStatus( EUserChallengeStatus . PENDING )
150152 }
151153
152154 EUserReportResultCode .RECEIVE_REPORT_FAILED -> {
@@ -165,10 +167,6 @@ class UserChallengeCommandService(
165167 }
166168 }
167169
168- private fun updateUserChallengeStatusToPending (userChallenge : UserChallenge ) {
169- userChallenge.updateStatus(EUserChallengeStatus .PENDING )
170- }
171-
172170 override fun processAfterCertificateIce (
173171 iceDto : UserChallengeIceRequestDto ,
174172 certificationDate : LocalDate
@@ -304,4 +302,32 @@ class UserChallengeCommandService(
304302 // UserChallenge와 연결된 모든 히스토리가 함께 저장됨
305303 userChallengeService.save(userChallenge)
306304 }
305+
306+ suspend fun batchUpdateChallengeStatusFromRunningToPending (validateToday : LocalDate ) {
307+ val runningUserChallengeList : List <UserChallenge > = userChallengeService.findAllByStatus(EUserChallengeStatus .RUNNING )
308+
309+ runningUserChallengeList.forEach { userChallenge ->
310+ if (userChallenge.checkIsNotRunning(validateToday)) {
311+ makeReport(userChallenge)
312+ }
313+ }
314+ }
315+
316+ suspend fun batchUpdateChallengeStatusFromPendingToCompleted (validateToday : LocalDate ) {
317+ val pendingUserChallengeList : List <UserChallenge > = userChallengeService.findAllByStatus(EUserChallengeStatus .PENDING )
318+ pendingUserChallengeList.forEach { userChallenge ->
319+ if (userChallenge.checkIsCompleted(validateToday)) {
320+ userChallenge.updateStatus(EUserChallengeStatus .COMPLETED )
321+ }
322+ }
323+ }
324+
325+ suspend fun batchUpdateChallengeStatusFromWaitingToCompleted (validateToday : LocalDate ) {
326+ val waitingUserChallengeList : List <UserChallenge > = userChallengeService.findAllByStatus(EUserChallengeStatus .WAITING )
327+ waitingUserChallengeList.forEach { userChallenge ->
328+ if (userChallenge.checkIsCompleted(validateToday)) {
329+ userChallenge.updateStatus(EUserChallengeStatus .COMPLETED )
330+ }
331+ }
332+ }
307333}
0 commit comments