Skip to content

Commit

Permalink
[Refactor]: 챌린지 그룹 경험치 획득 Event - Service에 적용 (#43)
Browse files Browse the repository at this point in the history
  • Loading branch information
bayy1216 committed Jul 9, 2024
1 parent 961258d commit 7a942df
Showing 1 changed file with 19 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,16 @@ public class UserChallengeService {
private final ChallengeGroupReader challengeGroupReader;
private final ChallengeGroupUserExpStore challengeGroupUserExpStore;
/**
* 챌린지 참여하기 1. 유저와 챌린지 정보를 받아서 UserChallenge 테이블에 데이터 추가
* 챌린지 참여하기 <br>
* 1. 유저와 챌린지 정보를 받아서 UserChallenge 테이블에 데이터 추가
* 2. 챌린지그룹-유저 경험치 테이블에 데이터 추가
*/
@Transactional
public void participateChallenge(Long userId, Long challengeId) {
User user = userReader.getById(userId);
Challenge challenge = challengeReader.getById(challengeId);

/**
* 이미 참여한 챌린지인지 확인
*/
//이미 참여한 챌린지인지 확인
userChallengeReader.findByUserIdAndChallengeId(userId, challengeId)
.ifPresent(userChallenge -> {
throw new IllegalArgumentException("이미 참여한 챌린지입니다.");
Expand All @@ -50,12 +50,20 @@ public void participateChallenge(Long userId, Long challengeId) {
UserChallenge userChallenge = UserChallenge.create(challenge, user);
userChallengeStore.store(userChallenge);


ChallengeGroupUserExp entity = ChallengeGroupUserExp
.create(challenge.getChallengeGroup(), user);
challengeGroupUserExpStore.store(entity);

// TODO: 챌린지 그룹 누적 참여자수 증가 로직 추가
}

/**
* 챌린지 인증하기 <p> 1. ChallengeVerification 테이블에 데이터 추가 <br> 2. Challenge 엔티티에서 필요참여횟수 가져오기 <br> 3.
* UserChallenge 엔티티에서 참여횟수 가져오기 <br> 4. 참여횟수와 필요참여횟수가 같으면 챌린지 완료로 변경
* 챌린지 인증하기 <p>
* 1. ChallengeVerification 테이블에 데이터 추가 <br>
* 2. Challenge 엔티티에서 필요참여횟수 가져오기 <br>
* 3. UserChallenge 엔티티에서 참여횟수 가져오기 <br>
* 4. 참여횟수와 필요참여횟수가 같으면 챌린지 완료로 변경
*/
@Transactional
public ChallengeModel.ChallengeVerificationResult verification(
Expand All @@ -69,20 +77,14 @@ public ChallengeModel.ChallengeVerificationResult verification(
throw new IllegalArgumentException("해당 챌린지에 참여한 유저가 아닙니다.");
}

Integer beforeExp = userChallenge.getUser().getExp();
userChallenge.addChallengeVerification(command);
Integer afterExp = userChallenge.getUser().getExp();

AddExpToChallengeGroupEvent addExpToChallengeGroupEvent = userChallenge.addChallengeVerification(command);

// 챌린지 경험치 획득 로직
Long challengeGroupId = userChallenge.getChallenge().getChallengeGroupId();
ChallengeGroupUserExp challengeGroupUserExp = challengeGroupReader
.findByChallengeGroupIdAndUserId(userChallenge.getChallenge().getChallengeGroup().getId(),
userId)
.orElseGet(() -> {
ChallengeGroupUserExp entity = ChallengeGroupUserExp
.create(userChallenge.getChallenge().getChallengeGroup(), userChallenge.getUser());
return challengeGroupUserExpStore.store(entity);
});
challengeGroupUserExp.addExp(afterExp - beforeExp);
.findByChallengeGroupIdAndUserId(challengeGroupId, userId).orElseThrow();
challengeGroupUserExp.addExp(addExpToChallengeGroupEvent.getAcquiredExp());

// 챌린지 RequiredCount 가져오기 위해 챌린지 정보 가져온다
Challenge challenge = userChallenge.getChallenge();
Expand Down

0 comments on commit 7a942df

Please sign in to comment.