diff --git a/src/main/java/com/soptie/server/domain/challenge/MemberChallenge.java b/src/main/java/com/soptie/server/domain/challenge/MemberChallenge.java index 41fc7e8e..bc5cf34b 100644 --- a/src/main/java/com/soptie/server/domain/challenge/MemberChallenge.java +++ b/src/main/java/com/soptie/server/domain/challenge/MemberChallenge.java @@ -19,4 +19,8 @@ public void achieve() { this.achievedCount++; this.achieved = true; } + + public void cancel() { + this.achievedCount--; + } } diff --git a/src/main/java/com/soptie/server/domain/challenge/MemberChallengeService.java b/src/main/java/com/soptie/server/domain/challenge/MemberChallengeService.java index cff21bb6..27d7a7d9 100644 --- a/src/main/java/com/soptie/server/domain/challenge/MemberChallengeService.java +++ b/src/main/java/com/soptie/server/domain/challenge/MemberChallengeService.java @@ -73,6 +73,10 @@ public void achieveMemberChallenge(long memberId) { @Transactional public void deleteHistory(long historyId) { + val history = challengeHistoryAdapter.findById(historyId); + val memberChallenge = memberChallengeAdapter.findById(history.getMemberChallengeId()); + memberChallenge.cancel(); + memberChallengeAdapter.update(memberChallenge); challengeHistoryAdapter.deleteById(historyId); } } diff --git a/src/main/java/com/soptie/server/persistence/adapter/challenge/ChallengeHistoryAdapter.java b/src/main/java/com/soptie/server/persistence/adapter/challenge/ChallengeHistoryAdapter.java index 13ddcbee..8ed49a52 100644 --- a/src/main/java/com/soptie/server/persistence/adapter/challenge/ChallengeHistoryAdapter.java +++ b/src/main/java/com/soptie/server/persistence/adapter/challenge/ChallengeHistoryAdapter.java @@ -6,6 +6,8 @@ import org.springframework.stereotype.Component; +import com.soptie.server.common.exception.ExceptionCode; +import com.soptie.server.common.exception.SoftieException; import com.soptie.server.domain.challenge.Challenge; import com.soptie.server.domain.challenge.ChallengeHistory; import com.soptie.server.domain.challenge.MemberChallenge; @@ -39,4 +41,10 @@ public List findAllByMemberIdAndCreatedAtBetween( return historyRepository.findAllByMemberIdAndCreatedAtBetween(memberId, startDateTime, endDateTime).stream() .map(ChallengeHistoryEntity::toDomain).toList(); } + + public ChallengeHistory findById(final long id) { + return historyRepository.findById(id) + .orElseThrow(() -> new SoftieException(ExceptionCode.NOT_FOUND, "ChallengeHistoryId: " + id)) + .toDomain(); + } } diff --git a/src/main/java/com/soptie/server/persistence/adapter/challenge/MemberChallengeAdapter.java b/src/main/java/com/soptie/server/persistence/adapter/challenge/MemberChallengeAdapter.java index ee463284..021e8e57 100644 --- a/src/main/java/com/soptie/server/persistence/adapter/challenge/MemberChallengeAdapter.java +++ b/src/main/java/com/soptie/server/persistence/adapter/challenge/MemberChallengeAdapter.java @@ -61,6 +61,10 @@ public List findAllByMemberId(long memberId) { .toList(); } + public MemberChallenge findById(long id) { + return find(id).toDomain(); + } + private MemberChallengeEntity find(long id) { return memberChallengeRepository.findById(id) .orElseThrow(() -> new SoftieException(ExceptionCode.NOT_FOUND, "MemberChallenge ID: " + id));