From a888fe57fc6e9a0aa58d8b67f42215d20b1ab34c Mon Sep 17 00:00:00 2001 From: hyeonjeongs Date: Wed, 28 Feb 2024 10:08:37 +0900 Subject: [PATCH] =?UTF-8?q?YEL-214=20[fix]=20=ED=88=AC=ED=91=9C=EC=8B=9C?= =?UTF-8?q?=20=EA=B0=91=EC=9E=90=EA=B8=B0=20=ED=83=88=ED=87=B4=ED=95=9C=20?= =?UTF-8?q?=ED=9A=8C=EC=9B=90=20=ED=88=AC=ED=91=9C=EB=8A=94=20=EB=B0=98?= =?UTF-8?q?=EC=98=81=EB=90=98=EC=A7=80=20=EC=95=8A=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/vote/service/VoteManagerImpl.java | 143 +++++++++--------- 1 file changed, 68 insertions(+), 75 deletions(-) diff --git a/src/main/java/com/yello/server/domain/vote/service/VoteManagerImpl.java b/src/main/java/com/yello/server/domain/vote/service/VoteManagerImpl.java index 37c79d98..a752daf9 100644 --- a/src/main/java/com/yello/server/domain/vote/service/VoteManagerImpl.java +++ b/src/main/java/com/yello/server/domain/vote/service/VoteManagerImpl.java @@ -1,19 +1,5 @@ package com.yello.server.domain.vote.service; -import static com.yello.server.global.common.ErrorCode.DUPLICATE_VOTE_EXCEPTION; -import static com.yello.server.global.common.ErrorCode.INVALID_VOTE_EXCEPTION; -import static com.yello.server.global.common.ErrorCode.LACK_POINT_EXCEPTION; -import static com.yello.server.global.common.ErrorCode.LACK_USER_EXCEPTION; -import static com.yello.server.global.common.factory.WeightedRandomFactory.randomPoint; -import static com.yello.server.global.common.util.ConstantUtil.KEYWORD_HINT_POINT; -import static com.yello.server.global.common.util.ConstantUtil.NAME_HINT_DEFAULT; -import static com.yello.server.global.common.util.ConstantUtil.NAME_HINT_POINT; -import static com.yello.server.global.common.util.ConstantUtil.NO_FRIEND_COUNT; -import static com.yello.server.global.common.util.ConstantUtil.RANDOM_COUNT; -import static com.yello.server.global.common.util.ConstantUtil.VOTE_COUNT; -import static com.yello.server.global.common.util.ConstantUtil.YELLO_FEMALE; -import static com.yello.server.global.common.util.ConstantUtil.YELLO_MALE; - import com.yello.server.domain.friend.dto.response.FriendShuffleResponse; import com.yello.server.domain.friend.entity.Friend; import com.yello.server.domain.friend.exception.FriendException; @@ -33,17 +19,19 @@ import com.yello.server.domain.vote.exception.VoteForbiddenException; import com.yello.server.domain.vote.exception.VoteNotFoundException; import com.yello.server.domain.vote.repository.VoteRepository; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.ThreadLocalRandom; -import java.util.stream.IntStream; import lombok.Builder; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; +import java.util.stream.IntStream; + +import static com.yello.server.global.common.ErrorCode.*; +import static com.yello.server.global.common.factory.WeightedRandomFactory.randomPoint; +import static com.yello.server.global.common.util.ConstantUtil.*; + @Builder @Component @RequiredArgsConstructor @@ -66,27 +54,32 @@ public List createVotes(Long senderId, List voteAnswers) { final User sender = userRepository.getById(senderId); IntStream.range(0, voteAnswers.size()) - .forEach(index -> { - VoteAnswer currentVote = voteAnswers.get(index); + .filter(index -> { + User receiver = userRepository.getById(voteAnswers.get(index).friendId()); + return Objects.isNull(receiver.getDeletedAt()); + }) + .forEach(index -> { + VoteAnswer currentVote = voteAnswers.get(index); + + if (isDuplicatedVote(index, voteAnswers)) { + throw new VoteForbiddenException(DUPLICATE_VOTE_EXCEPTION); + } - if (isDuplicatedVote(index, voteAnswers)) { - throw new VoteForbiddenException(DUPLICATE_VOTE_EXCEPTION); - } + User receiver = userRepository.getById(currentVote.friendId()); + Question question = questionRepository.getById(currentVote.questionId()); - User receiver = userRepository.getById(currentVote.friendId()); - Question question = questionRepository.getById(currentVote.questionId()); - Vote newVote = Vote.createVote( - currentVote.keywordName(), - sender, - receiver, - question, - currentVote.colorIndex() - ); + Vote newVote = Vote.createVote( + currentVote.keywordName(), + sender, + receiver, + question, + currentVote.colorIndex() + ); - Vote savedVote = voteRepository.save(newVote); - votes.add(savedVote); - }); + Vote savedVote = voteRepository.save(newVote); + votes.add(savedVote); + }); return votes; } @@ -97,15 +90,15 @@ public List generateVoteQuestion(User user, List QuestionForVoteResponse.builder() - .friendList(getShuffledFriends(user)) - .keywordList(getShuffledKeywords(question)) - .question(QuestionVO.of(question)) - .questionPoint(randomPoint()) - .subscribe(user.getSubscribe().toString()) - .build()) - .limit(VOTE_COUNT) - .toList(); + .map(question -> QuestionForVoteResponse.builder() + .friendList(getShuffledFriends(user)) + .keywordList(getShuffledKeywords(question)) + .question(QuestionVO.of(question)) + .questionPoint(randomPoint()) + .subscribe(user.getSubscribe().toString()) + .build()) + .limit(VOTE_COUNT) + .toList(); } @Override @@ -146,18 +139,18 @@ public KeywordCheckResponse useKeywordHint(User user, Vote vote) { public void makeGreetingVote(User user) { final User sender = userManager.getOfficialUser(user.getGender()); final Question greetingQuestion = questionRepository.findByQuestionContent( - null, - GREETING_NAME_FOOT, - null, - GREETING_KEYWORD_FOOT + null, + GREETING_NAME_FOOT, + null, + GREETING_KEYWORD_FOOT ).orElseGet(() -> - questionRepository.save( - Question.of( - null, - GREETING_NAME_FOOT, - null, - GREETING_KEYWORD_FOOT) - ) + questionRepository.save( + Question.of( + null, + GREETING_NAME_FOOT, + null, + GREETING_KEYWORD_FOOT) + ) ); voteRepository.save(createFirstVote(sender, user, greetingQuestion)); @@ -177,19 +170,19 @@ public List getShuffledFriends(User user) { if (friends.size() > NO_FRIEND_COUNT && friends.size() < RANDOM_COUNT) { return friendList.stream() - .map(FriendShuffleResponse::of) - .toList(); + .map(FriendShuffleResponse::of) + .toList(); } return friendList.stream() - .map(FriendShuffleResponse::of) - .limit(RANDOM_COUNT) - .toList(); + .map(FriendShuffleResponse::of) + .limit(RANDOM_COUNT) + .toList(); } private boolean isDuplicatedVote(int index, List voteAnswers) { return index > 0 && voteAnswers.get(index - 1).questionId() - .equals(voteAnswers.get(index).questionId()); + .equals(voteAnswers.get(index).questionId()); } private List getShuffledKeywords(Question question) { @@ -198,9 +191,9 @@ private List getShuffledKeywords(Question question) { Collections.shuffle(keywordList); return keywordList.stream() - .map(Keyword::getKeywordName) - .limit(RANDOM_COUNT) - .toList(); + .map(Keyword::getKeywordName) + .limit(RANDOM_COUNT) + .toList(); } private Vote createFirstVote(User sender, User receiver, Question question) { @@ -208,14 +201,14 @@ private Vote createFirstVote(User sender, User receiver, Question question) { final String answer = "널 기다렸어"; return Vote.builder() - .answer(answer) - .nameHint(-3) - .isAnswerRevealed(true) - .isRead(false) - .sender(sender) - .receiver(receiver) - .question(question) - .colorIndex(random.nextInt(12) + 1) - .build(); + .answer(answer) + .nameHint(-3) + .isAnswerRevealed(true) + .isRead(false) + .sender(sender) + .receiver(receiver) + .question(question) + .colorIndex(random.nextInt(12) + 1) + .build(); } }