From d102181e5089353282f8934cffde1f2b0f278418 Mon Sep 17 00:00:00 2001 From: hyeonjeong Park Date: Wed, 13 Sep 2023 03:24:22 +0900 Subject: [PATCH 1/2] =?UTF-8?q?Revert=20"YEL-162=20[feat]=20=ED=88=AC?= =?UTF-8?q?=ED=91=9C=20=EC=88=98=EC=A0=95=EC=82=AC=ED=95=AD=20=EB=B0=98?= =?UTF-8?q?=EC=98=81"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/friend/service/FriendService.java | 19 +++- .../dto/response/VoteAvailableResponse.java | 6 +- .../domain/vote/service/VoteManager.java | 4 - .../domain/vote/service/VoteManagerImpl.java | 32 ++---- .../domain/vote/service/VoteService.java | 11 +- .../yello/server/global/common/ErrorCode.java | 2 +- .../global/common/util/ConstantUtil.java | 1 - .../friend/small/FriendServiceTest.java | 13 +-- .../server/domain/vote/FakeVoteManager.java | 16 +-- .../vote/medium/VoteControllerTest.java | 102 ++++++------------ 10 files changed, 69 insertions(+), 137 deletions(-) diff --git a/src/main/java/com/yello/server/domain/friend/service/FriendService.java b/src/main/java/com/yello/server/domain/friend/service/FriendService.java index 49e595cb..9bcf881a 100644 --- a/src/main/java/com/yello/server/domain/friend/service/FriendService.java +++ b/src/main/java/com/yello/server/domain/friend/service/FriendService.java @@ -1,6 +1,8 @@ package com.yello.server.domain.friend.service; import static com.yello.server.global.common.ErrorCode.EXIST_FRIEND_EXCEPTION; +import static com.yello.server.global.common.ErrorCode.LACK_USER_EXCEPTION; +import static com.yello.server.global.common.util.ConstantUtil.RANDOM_COUNT; import static com.yello.server.global.common.util.ConstantUtil.YELLO_FEMALE; import static com.yello.server.global.common.util.ConstantUtil.YELLO_MALE; @@ -18,7 +20,6 @@ import com.yello.server.domain.user.entity.User; import com.yello.server.domain.user.repository.UserRepository; import com.yello.server.domain.vote.repository.VoteRepository; -import com.yello.server.domain.vote.service.VoteManager; import com.yello.server.global.common.factory.PaginationFactory; import java.lang.Character.UnicodeBlock; import java.util.ArrayList; @@ -42,7 +43,6 @@ public class FriendService { private final FriendRepository friendRepository; private final UserRepository userRepository; private final VoteRepository voteRepository; - private final VoteManager voteManager; public FriendsResponse findAllFriends(Pageable pageable, Long userId) { final Page friendsData = friendRepository.findAllFriendsByUserId(pageable, userId); @@ -77,7 +77,20 @@ public Friend addFriend(Long userId, Long targetId) { public List findShuffledFriend(Long userId) { final User user = userRepository.getById(userId); - return voteManager.getShuffledFriends(user); + final List friends = + new ArrayList<>(friendRepository.findAllByUserId(user.getId())); + List friendList = new ArrayList<>(friends); + + if (friendList.size() < RANDOM_COUNT) { + throw new FriendException(LACK_USER_EXCEPTION); + } + + Collections.shuffle(friendList); + + return friendList.stream() + .map(FriendShuffleResponse::of) + .limit(RANDOM_COUNT) + .toList(); } public RecommendFriendResponse findAllRecommendSchoolFriends(Pageable pageable, Long userId) { diff --git a/src/main/java/com/yello/server/domain/vote/dto/response/VoteAvailableResponse.java b/src/main/java/com/yello/server/domain/vote/dto/response/VoteAvailableResponse.java index 440e0f5d..9f7ecaef 100644 --- a/src/main/java/com/yello/server/domain/vote/dto/response/VoteAvailableResponse.java +++ b/src/main/java/com/yello/server/domain/vote/dto/response/VoteAvailableResponse.java @@ -13,16 +13,14 @@ public record VoteAvailableResponse( Boolean isPossible, Integer point, - String createdAt, - Integer friendStatus + String createdAt ) { - public static VoteAvailableResponse of(User user, Cooldown cooldown, Integer friendStatus) { + public static VoteAvailableResponse of(User user, Cooldown cooldown) { return VoteAvailableResponse.builder() .isPossible(cooldown.isPossible()) .point(user.getPoint()) .createdAt(toDateFormattedString(cooldown.getCreatedAt())) - .friendStatus(friendStatus) .build(); } diff --git a/src/main/java/com/yello/server/domain/vote/service/VoteManager.java b/src/main/java/com/yello/server/domain/vote/service/VoteManager.java index 39a8a2ef..97566820 100644 --- a/src/main/java/com/yello/server/domain/vote/service/VoteManager.java +++ b/src/main/java/com/yello/server/domain/vote/service/VoteManager.java @@ -1,6 +1,5 @@ package com.yello.server.domain.vote.service; -import com.yello.server.domain.friend.dto.response.FriendShuffleResponse; import com.yello.server.domain.keyword.dto.response.KeywordCheckResponse; import com.yello.server.domain.question.dto.response.QuestionForVoteResponse; import com.yello.server.domain.question.entity.Question; @@ -20,7 +19,4 @@ public interface VoteManager { KeywordCheckResponse useKeywordHint(User user, Vote vote); void makeGreetingVote(User user); - - List getShuffledFriends(User user); - } 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 ab6c4978..d524b1a0 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 @@ -3,12 +3,10 @@ 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; @@ -16,7 +14,6 @@ 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; import com.yello.server.domain.friend.repository.FriendRepository; import com.yello.server.domain.keyword.dto.response.KeywordCheckResponse; import com.yello.server.domain.keyword.entity.Keyword; @@ -110,11 +107,11 @@ public List generateVoteQuestion(User user, List getShuffledFriends(User user) { + private boolean isDuplicatedVote(int index, List voteAnswers) { + return index > 0 && voteAnswers.get(index - 1).questionId() + .equals(voteAnswers.get(index).questionId()); + } + + private List getShuffledFriends(User user) { List uuidList = Arrays.asList(YELLO_FEMALE, YELLO_MALE); final List friends = friendRepository.findAllByUserIdNotIn(user.getId(), uuidList); List friendList = new ArrayList<>(friends); Collections.shuffle(friendList); - if (friends.size()==NO_FRIEND_COUNT) { - throw new FriendException(LACK_USER_EXCEPTION); - } - - if (friends.size() > NO_FRIEND_COUNT && friends.size() < RANDOM_COUNT) { - return friendList.stream() - .map(FriendShuffleResponse::of) - .toList(); - } - return friendList.stream() .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()); - } - private List getShuffledKeywords(Question question) { final List keywords = question.getKeywordList(); List keywordList = new ArrayList<>(keywords); diff --git a/src/main/java/com/yello/server/domain/vote/service/VoteService.java b/src/main/java/com/yello/server/domain/vote/service/VoteService.java index 8ba3c12c..09f79756 100644 --- a/src/main/java/com/yello/server/domain/vote/service/VoteService.java +++ b/src/main/java/com/yello/server/domain/vote/service/VoteService.java @@ -9,7 +9,6 @@ import static com.yello.server.global.common.util.ConstantUtil.CHECK_FULL_NAME; import static com.yello.server.global.common.util.ConstantUtil.COOL_DOWN_TIME; import static com.yello.server.global.common.util.ConstantUtil.MINUS_TICKET_COUNT; -import static com.yello.server.global.common.util.ConstantUtil.NO_FRIEND_COUNT; import static com.yello.server.global.common.util.ConstantUtil.RANDOM_COUNT; import com.yello.server.domain.cooldown.entity.Cooldown; @@ -123,7 +122,7 @@ public List findVoteQuestionList(Long userId) { final User user = userRepository.getById(userId); final List friends = friendRepository.findAllByUserId(user.getId()); - if (friends.size()==NO_FRIEND_COUNT) { + if (friends.size() < RANDOM_COUNT) { throw new FriendException(LACK_USER_EXCEPTION); } @@ -145,18 +144,14 @@ public VoteAvailableResponse checkVoteAvailable(Long userId) { final String messageId = UUID.randomUUID().toString(); final List friends = friendRepository.findAllByUserId(user.getId()); - if (friends.size()==NO_FRIEND_COUNT) { + if (friends.size() < RANDOM_COUNT) { throw new FriendException(LACK_USER_EXCEPTION); } final Cooldown cooldown = cooldownRepository.findByUserId(user.getId()) .orElse(Cooldown.of(user, messageId, minusTime(LocalDateTime.now(), COOL_DOWN_TIME))); - if (friends.size() > NO_FRIEND_COUNT && friends.size() < RANDOM_COUNT) { - return VoteAvailableResponse.of(user, cooldown, 0); - } - - return VoteAvailableResponse.of(user, cooldown, 1); + return VoteAvailableResponse.of(user, cooldown); } @Transactional diff --git a/src/main/java/com/yello/server/global/common/ErrorCode.java b/src/main/java/com/yello/server/global/common/ErrorCode.java index f60c887c..de645c5b 100644 --- a/src/main/java/com/yello/server/global/common/ErrorCode.java +++ b/src/main/java/com/yello/server/global/common/ErrorCode.java @@ -22,7 +22,7 @@ public enum ErrorCode { REQUEST_VALIDATION_EXCEPTION(BAD_REQUEST, "잘못된 요청입니다."), YELLOID_REQUIRED_EXCEPTION(BAD_REQUEST, "쿼리 스트링에 yelloId를 포함해야 합니다."), OAUTH_ACCESS_TOKEN_REQUIRED_EXCEPTION(BAD_REQUEST, "소셜 액세스 토큰이 없습니다."), - LACK_USER_EXCEPTION(BAD_REQUEST, "친구가 부족합니다."), + LACK_USER_EXCEPTION(BAD_REQUEST, "친구가 4명 이하입니다."), SIGNIN_FIELD_REQUIRED_EXCEPTION(BAD_REQUEST, "회원가입에 필요한 값이 없습니다."), FIELD_REQUIRED_EXCEPTION(BAD_REQUEST, "필요한 값이 없습니다."), INVALID_VOTE_EXCEPTION(BAD_REQUEST, "이미 공개한 투표입니다"), diff --git a/src/main/java/com/yello/server/global/common/util/ConstantUtil.java b/src/main/java/com/yello/server/global/common/util/ConstantUtil.java index f4ca3b48..6c330fbd 100644 --- a/src/main/java/com/yello/server/global/common/util/ConstantUtil.java +++ b/src/main/java/com/yello/server/global/common/util/ConstantUtil.java @@ -57,7 +57,6 @@ public class ConstantUtil { public static final int REFUND_ONE_TICKET = 1; public static final int REFUND_TWO_TICKET = 2; public static final int REFUND_FIVE_TICKET = 5; - public static final int NO_FRIEND_COUNT = 0; private ConstantUtil() { diff --git a/src/test/java/com/yello/server/domain/friend/small/FriendServiceTest.java b/src/test/java/com/yello/server/domain/friend/small/FriendServiceTest.java index 235e82bd..3378e964 100644 --- a/src/test/java/com/yello/server/domain/friend/small/FriendServiceTest.java +++ b/src/test/java/com/yello/server/domain/friend/small/FriendServiceTest.java @@ -18,16 +18,12 @@ import com.yello.server.domain.friend.service.FriendService; import com.yello.server.domain.question.FakeQuestionRepository; import com.yello.server.domain.question.repository.QuestionRepository; -import com.yello.server.domain.user.FakeUserManager; import com.yello.server.domain.user.FakeUserRepository; import com.yello.server.domain.user.entity.User; import com.yello.server.domain.user.exception.UserNotFoundException; import com.yello.server.domain.user.repository.UserRepository; -import com.yello.server.domain.user.service.UserManager; -import com.yello.server.domain.vote.FakeVoteManager; import com.yello.server.domain.vote.FakeVoteRepository; import com.yello.server.domain.vote.repository.VoteRepository; -import com.yello.server.domain.vote.service.VoteManager; import com.yello.server.util.TestDataRepositoryUtil; import java.util.List; import java.util.Optional; @@ -46,10 +42,6 @@ class FriendServiceTest { private final FriendRepository friendRepository = new FakeFriendRepository(); private final VoteRepository voteRepository = new FakeVoteRepository(); private final QuestionRepository questionRepository = new FakeQuestionRepository(); - private final UserManager userManager = new FakeUserManager(userRepository); - private final VoteManager voteManager = - new FakeVoteManager(userRepository, questionRepository, voteRepository, friendRepository, - userManager); private final TestDataRepositoryUtil testDataUtil = new TestDataRepositoryUtil( userRepository, voteRepository, @@ -70,7 +62,6 @@ void init() { .userRepository(userRepository) .friendRepository(friendRepository) .voteRepository(voteRepository) - .voteManager(voteManager) .build(); user1 = testDataUtil.generateUser(1L, 1L); @@ -172,13 +163,13 @@ void init() { @Test void 친구_셔플_시_친구_수가_부족한_경우에_FriendException이_발생합니다() { // given - final Long userId = 3L; + final Long userId = 1L; // when // then assertThatThrownBy(() -> friendService.findShuffledFriend(userId)) .isInstanceOf(FriendException.class) - .hasMessageContaining("[FriendException] 친구가 부족합니다."); + .hasMessageContaining("[FriendException] 친구가 4명 이하입니다."); } @Test diff --git a/src/test/java/com/yello/server/domain/vote/FakeVoteManager.java b/src/test/java/com/yello/server/domain/vote/FakeVoteManager.java index e57e425c..deadc264 100644 --- a/src/test/java/com/yello/server/domain/vote/FakeVoteManager.java +++ b/src/test/java/com/yello/server/domain/vote/FakeVoteManager.java @@ -3,18 +3,15 @@ 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 com.yello.server.domain.friend.dto.response.FriendShuffleResponse; import com.yello.server.domain.friend.entity.Friend; -import com.yello.server.domain.friend.exception.FriendException; import com.yello.server.domain.friend.repository.FriendRepository; import com.yello.server.domain.keyword.dto.response.KeywordCheckResponse; import com.yello.server.domain.keyword.entity.Keyword; @@ -166,22 +163,11 @@ private boolean isDuplicatedVote(int index, List voteAnswers) { .equals(voteAnswers.get(index).questionId()); } - @Override - public List getShuffledFriends(User user) { + private List getShuffledFriends(User user) { final List friends = friendRepository.findAllByUserId(user.getId()); List friendList = new ArrayList<>(friends); Collections.shuffle(friendList); - if (friends.size()==NO_FRIEND_COUNT) { - throw new FriendException(LACK_USER_EXCEPTION); - } - - if (friends.size() > NO_FRIEND_COUNT && friends.size() < RANDOM_COUNT) { - return friendList.stream() - .map(FriendShuffleResponse::of) - .toList(); - } - return friendList.stream() .map(FriendShuffleResponse::of) .limit(RANDOM_COUNT) diff --git a/src/test/java/com/yello/server/domain/vote/medium/VoteControllerTest.java b/src/test/java/com/yello/server/domain/vote/medium/VoteControllerTest.java index 7d2f2ffb..da193725 100644 --- a/src/test/java/com/yello/server/domain/vote/medium/VoteControllerTest.java +++ b/src/test/java/com/yello/server/domain/vote/medium/VoteControllerTest.java @@ -83,9 +83,8 @@ class VoteControllerTest { final String[] excludeRequestHeaders = {"X-CSRF-TOKEN", "Host"}; - final String[] excludeResponseHeaders = - {"X-Content-Type-Options", "X-XSS-Protection", "Cache-Control", "Pragma", - "Expires", "X-Frame-Options", "Content-Length"}; + final String[] excludeResponseHeaders = {"X-Content-Type-Options", "X-XSS-Protection", "Cache-Control", "Pragma", + "Expires", "X-Frame-Options", "Content-Length"}; @Autowired private MockMvc mockMvc; @@ -112,12 +111,10 @@ void init() { @Test void 내_투표_전체_조회에_성공합니다() throws Exception { // given - final Vote vote = - testDataUtil.generateVote(1L, user, target, testDataUtil.generateQuestion(1L)); + final Vote vote = testDataUtil.generateVote(1L, user, target, testDataUtil.generateQuestion(1L)); final VoteResponse voteResponse = VoteResponse.of(vote); final VoteCountVO voteCountVO = VoteCountVO.of(1, 0, 0, 0, 0); - final VoteListResponse voteListResponse = - VoteListResponse.of(voteCountVO, Arrays.asList(voteResponse), user); + final VoteListResponse voteListResponse = VoteListResponse.of(voteCountVO, Arrays.asList(voteResponse), user); given(voteService.findAllVotes(anyLong(), any(Pageable.class))) .willReturn(voteListResponse); @@ -129,10 +126,8 @@ void init() { .param("page", "0")) .andDo(print()) .andDo(document("api/v1/vote/findAllMyVotes", - Preprocessors.preprocessRequest(prettyPrint(), - removeHeaders(excludeRequestHeaders)), - Preprocessors.preprocessResponse(prettyPrint(), - removeHeaders(excludeResponseHeaders)), + Preprocessors.preprocessRequest(prettyPrint(), removeHeaders(excludeRequestHeaders)), + Preprocessors.preprocessResponse(prettyPrint(), removeHeaders(excludeResponseHeaders)), requestParameters(parameterWithName("page").description("페이지네이션 페이지 번호"))) ) .andExpect(MockMvcResultMatchers.status().isOk()); @@ -153,10 +148,8 @@ void init() { ) .andDo(print()) .andDo(document("api/v1/vote/getUnreadVoteCount", - Preprocessors.preprocessRequest(prettyPrint(), - removeHeaders(excludeRequestHeaders)), - Preprocessors.preprocessResponse(prettyPrint(), - removeHeaders(excludeResponseHeaders))) + Preprocessors.preprocessRequest(prettyPrint(), removeHeaders(excludeRequestHeaders)), + Preprocessors.preprocessResponse(prettyPrint(), removeHeaders(excludeResponseHeaders))) ) .andExpect(MockMvcResultMatchers.status().isOk()); } @@ -164,11 +157,9 @@ void init() { @Test void 친구_투표_조회에_성공합니다() throws Exception { // given - final Vote vote = - testDataUtil.generateVote(1L, user, target, testDataUtil.generateQuestion(1L)); + final Vote vote = testDataUtil.generateVote(1L, user, target, testDataUtil.generateQuestion(1L)); final VoteFriendVO voteFriendVO = VoteFriendVO.of(vote); - final VoteFriendResponse voteFriendResponse = - VoteFriendResponse.of(1, Arrays.asList(voteFriendVO)); + final VoteFriendResponse voteFriendResponse = VoteFriendResponse.of(1, Arrays.asList(voteFriendVO)); given(voteService.findAllFriendVotes(anyLong(), any(Pageable.class))) .willReturn(voteFriendResponse); @@ -180,10 +171,8 @@ void init() { .param("page", "0")) .andDo(print()) .andDo(document("api/v1/vote/findAllFriendVotes", - Preprocessors.preprocessRequest(prettyPrint(), - removeHeaders(excludeRequestHeaders)), - Preprocessors.preprocessResponse(prettyPrint(), - removeHeaders(excludeResponseHeaders)), + Preprocessors.preprocessRequest(prettyPrint(), removeHeaders(excludeRequestHeaders)), + Preprocessors.preprocessResponse(prettyPrint(), removeHeaders(excludeResponseHeaders)), requestParameters(parameterWithName("page").description("페이지네이션 페이지 번호"))) ) .andExpect(MockMvcResultMatchers.status().isOk()); @@ -192,8 +181,7 @@ void init() { @Test void 투표_상세_조회에_성공합니다() throws Exception { // given - final Vote vote = - testDataUtil.generateVote(1L, user, target, testDataUtil.generateQuestion(1L)); + final Vote vote = testDataUtil.generateVote(1L, user, target, testDataUtil.generateQuestion(1L)); final VoteDetailResponse voteDetailResponse = VoteDetailResponse.of(vote, user); given(voteService.findVoteById(anyLong(), anyLong())) @@ -206,10 +194,8 @@ void init() { ) .andDo(print()) .andDo(document("api/v1/vote/findVoteById", - Preprocessors.preprocessRequest(prettyPrint(), - removeHeaders(excludeRequestHeaders)), - Preprocessors.preprocessResponse(prettyPrint(), - removeHeaders(excludeResponseHeaders)), + Preprocessors.preprocessRequest(prettyPrint(), removeHeaders(excludeRequestHeaders)), + Preprocessors.preprocessResponse(prettyPrint(), removeHeaders(excludeResponseHeaders)), pathParameters(parameterWithName("voteId").description("투표 아이디 값"))) ) .andExpect(MockMvcResultMatchers.status().isOk()); @@ -218,8 +204,7 @@ void init() { @Test void 키워드_확인에_성공합니다() throws Exception { // given - final Vote vote = - testDataUtil.generateVote(1L, user, target, testDataUtil.generateQuestion(1L)); + final Vote vote = testDataUtil.generateVote(1L, user, target, testDataUtil.generateQuestion(1L)); final KeywordCheckResponse keywordCheckResponse = KeywordCheckResponse.of(vote); given(voteService.checkKeyword(anyLong(), anyLong())) @@ -233,10 +218,8 @@ void init() { ) .andDo(print()) .andDo(document("api/v1/vote/checkKeyword", - Preprocessors.preprocessRequest(prettyPrint(), - removeHeaders(excludeRequestHeaders)), - Preprocessors.preprocessResponse(prettyPrint(), - removeHeaders(excludeResponseHeaders)), + Preprocessors.preprocessRequest(prettyPrint(), removeHeaders(excludeRequestHeaders)), + Preprocessors.preprocessResponse(prettyPrint(), removeHeaders(excludeResponseHeaders)), pathParameters(parameterWithName("voteId").description("투표 아이디 값"))) ) .andExpect(MockMvcResultMatchers.status().isOk()); @@ -246,8 +229,7 @@ void init() { void 투표_8개_조회에_성공합니다() throws Exception { // given final Friend friend = testDataUtil.generateFriend(user, target); - final List friendShuffleResponses = - Arrays.asList(FriendShuffleResponse.of(friend)); + final List friendShuffleResponses = Arrays.asList(FriendShuffleResponse.of(friend)); final List keywordList = Arrays.asList("A", "B", "C", "D"); final QuestionVO questionVO = QuestionVO.of(testDataUtil.generateQuestion(1L)); final QuestionForVoteResponse questionForVoteResponse = QuestionForVoteResponse.builder() @@ -268,10 +250,8 @@ void init() { ) .andDo(print()) .andDo(document("api/v1/vote/findVoteQuestions", - Preprocessors.preprocessRequest(prettyPrint(), - removeHeaders(excludeRequestHeaders)), - Preprocessors.preprocessResponse(prettyPrint(), - removeHeaders(excludeResponseHeaders))) + Preprocessors.preprocessRequest(prettyPrint(), removeHeaders(excludeRequestHeaders)), + Preprocessors.preprocessResponse(prettyPrint(), removeHeaders(excludeResponseHeaders))) ) .andExpect(MockMvcResultMatchers.status().isOk()); } @@ -279,10 +259,8 @@ void init() { @Test void 투표_가능_여부_조회에_성공합니다() throws Exception { // given - final Cooldown cooldown = - Cooldown.of(user, UUID.randomUUID().toString(), LocalDateTime.now()); - final VoteAvailableResponse voteAvailableResponse = - VoteAvailableResponse.of(user, cooldown, 1); + final Cooldown cooldown = Cooldown.of(user, UUID.randomUUID().toString(), LocalDateTime.now()); + final VoteAvailableResponse voteAvailableResponse = VoteAvailableResponse.of(user, cooldown); given(voteService.checkVoteAvailable(anyLong())) .willReturn(voteAvailableResponse); @@ -294,10 +272,8 @@ void init() { ) .andDo(print()) .andDo(document("api/v1/vote/checkVoteAvailable", - Preprocessors.preprocessRequest(prettyPrint(), - removeHeaders(excludeRequestHeaders)), - Preprocessors.preprocessResponse(prettyPrint(), - removeHeaders(excludeResponseHeaders))) + Preprocessors.preprocessRequest(prettyPrint(), removeHeaders(excludeRequestHeaders)), + Preprocessors.preprocessResponse(prettyPrint(), removeHeaders(excludeResponseHeaders))) ) .andExpect(MockMvcResultMatchers.status().isOk()); } @@ -305,8 +281,7 @@ void init() { @Test void 투표_생성에_성공합니다() throws Exception { // given - final Vote vote = - testDataUtil.generateVote(1L, user, target, testDataUtil.generateQuestion(1L)); + final Vote vote = testDataUtil.generateVote(1L, user, target, testDataUtil.generateQuestion(1L)); final VoteCreateVO voteCreateVO = VoteCreateVO.of(10, Arrays.asList(vote)); final VoteCreateResponse voteCreateResponse = VoteCreateResponse.of(10); final VoteAnswer voteAnswer = VoteAnswer.builder() @@ -337,10 +312,8 @@ void init() { .content(objectMapper.writeValueAsString(createVoteRequest))) .andDo(print()) .andDo(document("api/v1/vote/createVote", - Preprocessors.preprocessRequest(prettyPrint(), - removeHeaders(excludeRequestHeaders)), - Preprocessors.preprocessResponse(prettyPrint(), - removeHeaders(excludeResponseHeaders))) + Preprocessors.preprocessRequest(prettyPrint(), removeHeaders(excludeRequestHeaders)), + Preprocessors.preprocessResponse(prettyPrint(), removeHeaders(excludeResponseHeaders))) ) .andExpect(MockMvcResultMatchers.status().isOk()); } @@ -362,10 +335,8 @@ void init() { ) .andDo(print()) .andDo(document("api/v1/vote/revealNameHint", - Preprocessors.preprocessRequest(prettyPrint(), - removeHeaders(excludeRequestHeaders)), - Preprocessors.preprocessResponse(prettyPrint(), - removeHeaders(excludeResponseHeaders)), + Preprocessors.preprocessRequest(prettyPrint(), removeHeaders(excludeRequestHeaders)), + Preprocessors.preprocessResponse(prettyPrint(), removeHeaders(excludeResponseHeaders)), pathParameters(parameterWithName("voteId").description("투표 아이디 값"))) ) .andExpect(MockMvcResultMatchers.status().isOk()); @@ -382,17 +353,14 @@ void init() { // when // then - mockMvc.perform( - RestDocumentationRequestBuilders.patch("/api/v1/vote/{voteId}/fullname", voteId) - .header(HttpHeaders.AUTHORIZATION, "Bearer your-access-token") - .with(csrf().asHeader()) + mockMvc.perform(RestDocumentationRequestBuilders.patch("/api/v1/vote/{voteId}/fullname", voteId) + .header(HttpHeaders.AUTHORIZATION, "Bearer your-access-token") + .with(csrf().asHeader()) ) .andDo(print()) .andDo(document("api/v1/vote/revealFullName", - Preprocessors.preprocessRequest(prettyPrint(), - removeHeaders(excludeRequestHeaders)), - Preprocessors.preprocessResponse(prettyPrint(), - removeHeaders(excludeResponseHeaders)), + Preprocessors.preprocessRequest(prettyPrint(), removeHeaders(excludeRequestHeaders)), + Preprocessors.preprocessResponse(prettyPrint(), removeHeaders(excludeResponseHeaders)), pathParameters(parameterWithName("voteId").description("투표 아이디 값"))) ) .andExpect(MockMvcResultMatchers.status().isOk()); From a49ba4a703d16be910ca05c15e79e53397719979 Mon Sep 17 00:00:00 2001 From: Lee Euije Date: Wed, 13 Sep 2023 03:28:06 +0900 Subject: [PATCH 2/2] =?UTF-8?q?Revert=20"YEL-155=20[feat]=20apple=20refund?= =?UTF-8?q?=20=EC=B2=98=EB=A6=AC"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../purchase/service/PurchaseManager.java | 1 - .../purchase/service/PurchaseManagerImpl.java | 35 +------------------ .../purchase/service/PurchaseService.java | 14 ++++---- .../yello/server/domain/user/entity/User.java | 7 ++-- .../domain/vote/service/VoteService.java | 2 +- .../global/common/util/ConstantUtil.java | 3 -- .../domain/purchase/FakePurchaseManager.java | 5 --- .../server/domain/user/small/UserTest.java | 2 +- 8 files changed, 13 insertions(+), 56 deletions(-) diff --git a/src/main/java/com/yello/server/domain/purchase/service/PurchaseManager.java b/src/main/java/com/yello/server/domain/purchase/service/PurchaseManager.java index 534ba543..be2ca77f 100644 --- a/src/main/java/com/yello/server/domain/purchase/service/PurchaseManager.java +++ b/src/main/java/com/yello/server/domain/purchase/service/PurchaseManager.java @@ -24,5 +24,4 @@ void handleAppleTransactionError(ResponseEntity respons void changeSubscriptionStatus(AppleNotificationPayloadVO payloadVO); - void refundAppleInApp(AppleNotificationPayloadVO payloadVO); } diff --git a/src/main/java/com/yello/server/domain/purchase/service/PurchaseManagerImpl.java b/src/main/java/com/yello/server/domain/purchase/service/PurchaseManagerImpl.java index 7a6e7af7..307c94f9 100644 --- a/src/main/java/com/yello/server/domain/purchase/service/PurchaseManagerImpl.java +++ b/src/main/java/com/yello/server/domain/purchase/service/PurchaseManagerImpl.java @@ -3,9 +3,6 @@ import static com.yello.server.global.common.ErrorCode.APPLE_TOKEN_SERVER_EXCEPTION; import static com.yello.server.global.common.ErrorCode.GOOGLE_SUBSCRIPTIONS_SUBSCRIPTION_EXCEPTION; import static com.yello.server.global.common.ErrorCode.NOT_FOUND_TRANSACTION_EXCEPTION; -import static com.yello.server.global.common.util.ConstantUtil.REFUND_FIVE_TICKET; -import static com.yello.server.global.common.util.ConstantUtil.REFUND_ONE_TICKET; -import static com.yello.server.global.common.util.ConstantUtil.REFUND_TWO_TICKET; import com.fasterxml.jackson.databind.ObjectMapper; import com.yello.server.domain.purchase.dto.apple.AppleNotificationPayloadVO; @@ -71,7 +68,7 @@ public void handleAppleTransactionError(ResponseEntity @Override public AppleNotificationPayloadVO decodeApplePayload(String signedPayload) { - + Map jsonPayload = DecodeTokenFactory.decodeToken(signedPayload); ObjectMapper objectMapper = new ObjectMapper(); @@ -120,35 +117,5 @@ public void changeSubscriptionStatus(AppleNotificationPayloadVO payloadVO) { } } - @Override - public void refundAppleInApp(AppleNotificationPayloadVO payloadVO) { - String transactionId = - decodeAppleNotificationData(payloadVO.data().signedTransactionInfo()); - Purchase purchase = purchaseRepository.findByTransactionId(transactionId) - .orElseThrow(() -> new PurchaseNotFoundException(NOT_FOUND_TRANSACTION_EXCEPTION)); - User user = purchase.getUser(); - - switch (purchase.getProductType()) { - case YELLO_PLUS -> { - user.setSubscribe(Subscribe.NORMAL); - } - case ONE_TICKET -> { - validateTicketCount(REFUND_ONE_TICKET, user); - } - case TWO_TICKET -> { - validateTicketCount(REFUND_TWO_TICKET, user); - } - case FIVE_TICKET -> { - validateTicketCount(REFUND_FIVE_TICKET, user); - } - } - } - - public void validateTicketCount(int ticketCount, User user) { - if (user.getTicketCount() >= ticketCount) { - user.setTicketCount(-Math.abs(ticketCount)); - } - } - } diff --git a/src/main/java/com/yello/server/domain/purchase/service/PurchaseService.java b/src/main/java/com/yello/server/domain/purchase/service/PurchaseService.java index 3e49e7eb..a7cccfe2 100644 --- a/src/main/java/com/yello/server/domain/purchase/service/PurchaseService.java +++ b/src/main/java/com/yello/server/domain/purchase/service/PurchaseService.java @@ -110,7 +110,7 @@ public void verifyAppleSubscriptionTransaction(Long userId, } purchaseManager.createSubscribe(user, Gateway.APPLE, request.transactionId()); - user.setTicketCount(3); + user.addTicketCount(3); } @Transactional @@ -126,17 +126,17 @@ public void verifyAppleTicketTransaction(Long userId, AppleTransaction request) case ONE_TICKET_ID: purchaseManager.createTicket(user, ProductType.ONE_TICKET, Gateway.APPLE, request.transactionId()); - user.setTicketCount(1); + user.addTicketCount(1); break; case TWO_TICKET_ID: purchaseManager.createTicket(user, ProductType.TWO_TICKET, Gateway.APPLE, request.transactionId()); - user.setTicketCount(2); + user.addTicketCount(2); break; case FIVE_TICKET_ID: purchaseManager.createTicket(user, ProductType.FIVE_TICKET, Gateway.APPLE, request.transactionId()); - user.setTicketCount(5); + user.addTicketCount(5); break; default: throw new PurchaseException(NOT_FOUND_TRANSACTION_EXCEPTION); @@ -206,7 +206,7 @@ public GoogleSubscriptionGetResponse verifyGoogleSubscriptionTransaction(Long us case ConstantUtil.GOOGLE_PURCHASE_SUBSCRIPTION_ACTIVE -> { final Purchase subscribe = purchaseManager.createSubscribe(user, Gateway.GOOGLE, request.orderId()); - user.setTicketCount(3); + user.addTicketCount(3); subscribe.setTransactionId(request.orderId()); } } @@ -259,7 +259,7 @@ public GoogleTicketGetResponse verifyGoogleTicketTransaction(Long userId, Purchase ticket = purchaseManager.createTicket(user, getProductType(request.productId()), Gateway.GOOGLE, request.orderId()); - user.setTicketCount(getTicketAmount(request.productId()) * request.quantity()); + user.addTicketCount(getTicketAmount(request.productId()) * request.quantity()); ticket.setTransactionId(inAppResponse.getBody().orderId()); } else { throw new GoogleBadRequestException(GOOGLE_INAPP_BAD_REQUEST_EXCEPTION); @@ -304,7 +304,7 @@ public void appleNotification(AppleNotificationRequest request) { purchaseManager.changeSubscriptionStatus(payloadVO); break; case APPLE_NOTIFICATION_REFUND: - purchaseManager.refundAppleInApp(payloadVO); + System.out.println("dd"); break; case APPLE_NOTIFICATION_TEST: return; diff --git a/src/main/java/com/yello/server/domain/user/entity/User.java b/src/main/java/com/yello/server/domain/user/entity/User.java index d433e453..4bcdf736 100644 --- a/src/main/java/com/yello/server/domain/user/entity/User.java +++ b/src/main/java/com/yello/server/domain/user/entity/User.java @@ -122,8 +122,7 @@ public static User of(SignUpRequest signUpRequest, School group) { .group(group) .groupAdmissionYear(signUpRequest.groupAdmissionYear()) .email(signUpRequest.email()) - .deviceToken(Objects.equals(signUpRequest.deviceToken(), "") ? null - : signUpRequest.deviceToken()) + .deviceToken(Objects.equals(signUpRequest.deviceToken(), "") ? null : signUpRequest.deviceToken()) .subscribe(Subscribe.NORMAL) .ticketCount(0) .build(); @@ -168,7 +167,7 @@ public void increaseRecommendPoint() { } public void plusPoint(Integer point) { - if (this.getSubscribe()==Subscribe.NORMAL) { + if (this.getSubscribe() == Subscribe.NORMAL) { this.point += point; return; } @@ -195,7 +194,7 @@ public void setSubscribe(Subscribe subscribe) { this.subscribe = subscribe; } - public void setTicketCount(int ticketCount) { + public void addTicketCount(int ticketCount) { this.ticketCount += ticketCount; } diff --git a/src/main/java/com/yello/server/domain/vote/service/VoteService.java b/src/main/java/com/yello/server/domain/vote/service/VoteService.java index 09f79756..4e893782 100644 --- a/src/main/java/com/yello/server/domain/vote/service/VoteService.java +++ b/src/main/java/com/yello/server/domain/vote/service/VoteService.java @@ -195,7 +195,7 @@ public RevealFullNameResponse revealFullName(Long userId, Long voteId) { } vote.checkNameIndexOf(CHECK_FULL_NAME); - sender.setTicketCount(MINUS_TICKET_COUNT); + sender.addTicketCount(MINUS_TICKET_COUNT); return RevealFullNameResponse.of(vote.getSender()); } diff --git a/src/main/java/com/yello/server/global/common/util/ConstantUtil.java b/src/main/java/com/yello/server/global/common/util/ConstantUtil.java index 6c330fbd..0940bdb7 100644 --- a/src/main/java/com/yello/server/global/common/util/ConstantUtil.java +++ b/src/main/java/com/yello/server/global/common/util/ConstantUtil.java @@ -54,9 +54,6 @@ public class ConstantUtil { public static final String APPLE_NOTIFICATION_TEST = "TEST"; public static final String APPLE_SUBTYPE_AUTO_RENEW_DISABLED = "AUTO_RENEW_DISABLED"; public static final String APPLE_SUBTYPE_VOLUNTARY = "VOLUNTARY"; - public static final int REFUND_ONE_TICKET = 1; - public static final int REFUND_TWO_TICKET = 2; - public static final int REFUND_FIVE_TICKET = 5; private ConstantUtil() { diff --git a/src/test/java/com/yello/server/domain/purchase/FakePurchaseManager.java b/src/test/java/com/yello/server/domain/purchase/FakePurchaseManager.java index 382dca89..cd1e7136 100644 --- a/src/test/java/com/yello/server/domain/purchase/FakePurchaseManager.java +++ b/src/test/java/com/yello/server/domain/purchase/FakePurchaseManager.java @@ -67,9 +67,4 @@ public String decodeAppleNotificationData(String signedTransactionInfo) { public void changeSubscriptionStatus(AppleNotificationPayloadVO payloadVO) { } - - @Override - public void refundAppleInApp(AppleNotificationPayloadVO payloadVO) { - - } } diff --git a/src/test/java/com/yello/server/domain/user/small/UserTest.java b/src/test/java/com/yello/server/domain/user/small/UserTest.java index acc3d969..e58eeff1 100644 --- a/src/test/java/com/yello/server/domain/user/small/UserTest.java +++ b/src/test/java/com/yello/server/domain/user/small/UserTest.java @@ -137,7 +137,7 @@ void init() { assertThat(user.getTicketCount()).isZero(); // when - user.setTicketCount(10); + user.addTicketCount(10); // then assertThat(user.getTicketCount()).isEqualTo(10);