From b7f400dc9bc993b772e473466b2f07015af98d6c Mon Sep 17 00:00:00 2001 From: Rimi Date: Thu, 29 Aug 2024 01:35:21 +0900 Subject: [PATCH 1/3] =?UTF-8?q?:bug:=20[fix]=20=ED=8F=AC=EC=A7=80=EC=85=98?= =?UTF-8?q?=EC=9D=B4=20=EB=9E=9C=EB=8D=A4=EA=B0=92=EC=9D=B8=200=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EA=B2=B9=EC=B9=A0=20=EB=95=8C=20=EC=9A=B0=EC=84=A0?= =?UTF-8?q?=EC=88=9C=EC=9C=84=200=20=EB=90=98=EB=8A=94=EA=B1=B0=20?= =?UTF-8?q?=EB=B0=A9=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gamegoo/service/matching/MatchingService.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gamegoo/service/matching/MatchingService.java b/src/main/java/com/gamegoo/service/matching/MatchingService.java index 7f504ee1..0b61c00e 100644 --- a/src/main/java/com/gamegoo/service/matching/MatchingService.java +++ b/src/main/java/com/gamegoo/service/matching/MatchingService.java @@ -140,8 +140,9 @@ private int calculatePriority(MatchingRecord myMatchingRecord, } // 주/부 포지션 조합이 같을 경우 X - if ((otherMainPosition.equals(myMainPosition) && otherSubPosition.equals(mySubPosition)) || - (otherMainPosition.equals(mySubPosition) && otherSubPosition.equals(myMainPosition))) { + // 겹치는게 둘 중 하나라도 0일 경우는 X + if ((otherMainPosition.equals(myMainPosition) && otherSubPosition.equals(mySubPosition) && !(otherMainPosition.equals(0) || otherSubPosition.equals(0))) || + (otherMainPosition.equals(mySubPosition) && otherSubPosition.equals(myMainPosition) && !(otherMainPosition.equals(0) || otherSubPosition.equals(0)))) { return 0; } From a9f4ae28995a3dd4dd58bc8c81f429d7791be413 Mon Sep 17 00:00:00 2001 From: Rimi Date: Thu, 29 Aug 2024 01:55:23 +0900 Subject: [PATCH 2/3] =?UTF-8?q?:bug:=20[fix]=20ErrorStatus=20=EC=83=81?= =?UTF-8?q?=ED=83=9C=20=EC=BD=94=EB=93=9C=20=EB=B3=80=EA=B2=BD=20=EB=B0=8F?= =?UTF-8?q?=20=EC=B0=A8=EB=8B=A8=ED=95=9C=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EB=81=BC=EB=A6=AC=20=EC=9A=B0=EC=84=A0=EC=88=9C=EC=9C=84=20?= =?UTF-8?q?=EA=B3=84=EC=82=B0=20=EC=95=88=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiPayload/code/status/ErrorStatus.java | 33 ++++++++++--------- .../service/matching/MatchingService.java | 14 +++++++- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java b/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java index cc59dae6..f8a3b986 100644 --- a/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java +++ b/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java @@ -25,33 +25,34 @@ public enum ErrorStatus implements BaseErrorCode { // Member 관련 에러 PASSWORD_INVALID(HttpStatus.BAD_REQUEST, "MEMBER400", "비밀번호가 불일치합니다."), - MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND, "MEMBER404", "해당 사용자를 찾을 수 없습니다."), - USER_DEACTIVATED(HttpStatus.FORBIDDEN, "MEMBER403", "해당 사용자는 탈퇴한 사용자입니다."), - MEMBER_CONFLICT(HttpStatus.CONFLICT, "MEMBER409", "이미 있는 사용자입니다."), + MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND, "MEMBER401", "해당 사용자를 찾을 수 없습니다."), + USER_DEACTIVATED(HttpStatus.FORBIDDEN, "MEMBER402", "해당 사용자는 탈퇴한 사용자입니다."), + MEMBER_CONFLICT(HttpStatus.CONFLICT, "MEMBER403", "이미 있는 사용자입니다."), // JWT 관련 에러 - TOKEN_EXPIRED(HttpStatus.UNAUTHORIZED, "JWT401", "jwt 토큰이 만료되었습니다."), - INVALID_TOKEN(HttpStatus.BAD_REQUEST, "JWT400", "유효하지 않은 jwt 토큰입니다."), - TOKEN_NULL(HttpStatus.NOT_FOUND, "JWT404", "JWT 토큰이 없습니다."), + TOKEN_EXPIRED(HttpStatus.UNAUTHORIZED, "JWT400", "jwt 토큰이 만료되었습니다."), + INVALID_TOKEN(HttpStatus.BAD_REQUEST, "JWT401", "유효하지 않은 jwt 토큰입니다."), + TOKEN_NULL(HttpStatus.NOT_FOUND, "JWT402", "JWT 토큰이 없습니다."), // GameStyle 관련 에러 - GAMESTYLE_NOT_FOUND(HttpStatus.NOT_FOUND, "GAMESTYLE404", "해당 게임 스타일을 찾을 수 없습니다."), + GAMESTYLE_NOT_FOUND(HttpStatus.NOT_FOUND, "GAMESTYLE400", "해당 게임 스타일을 찾을 수 없습니다."), // Position 관련 에러 - POSITION_NOT_FOUND(HttpStatus.NOT_FOUND, "POSITION404", "해당 Position을 찾을 수 없습니다."), + POSITION_NOT_FOUND(HttpStatus.NOT_FOUND, "POSITION400", "해당 Position을 찾을 수 없습니다."), // Email 인증 관련 에러 - EMAIL_SEND_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "EMAIL500", "이메일 전송 도중, 에러가 발생했습니다."), - EMAIL_NOT_FOUND(HttpStatus.NOT_FOUND, "EMAIL404", "해당 이메일을 찾을 수 없습니다."), - EMAIL_INVALID_CODE(HttpStatus.BAD_REQUEST, "EMAIL400", "인증 코드가 불일치합니다."), - EMAIL_INVALID_TIME(HttpStatus.BAD_REQUEST, "EMAIL400", "이메일 인증 시간이 3분 초과했습니다."), + EMAIL_SEND_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "EMAIL400", "이메일 전송 도중, 에러가 발생했습니다."), + EMAIL_NOT_FOUND(HttpStatus.NOT_FOUND, "EMAIL401", "해당 이메일을 찾을 수 없습니다."), + EMAIL_INVALID_CODE(HttpStatus.BAD_REQUEST, "EMAIL402", "인증 코드가 불일치합니다."), + EMAIL_INVALID_TIME(HttpStatus.BAD_REQUEST, "EMAIL403", "이메일 인증 시간이 3분 초과했습니다."), // 매칭 관련 에러 MATCHING_STATUS_BAD_REQUEST(HttpStatus.BAD_REQUEST, "MATCH400", "status는 SUCCESS, FAIL 둘 중 하나로만 변경이 가능합니다."), - MATHCING_TYPE_BAD_REQUEST(HttpStatus.BAD_REQUEST, "MATCH400", + MATHCING_TYPE_BAD_REQUEST(HttpStatus.BAD_REQUEST, "MATCH401", "matchingType은 BASIC, PRECISE 둘 중 하나여야합니다."), - MATCHING_NOT_FOUND(HttpStatus.NOT_FOUND, "MATCH404", "해당 사용자의 매칭 정보가 없습니다."), + MATCHING_NOT_FOUND(HttpStatus.NOT_FOUND, "MATCH402", "해당 사용자의 매칭 정보가 없습니다."), + MATCHING_FAILED_BY_BLOCK(HttpStatus.BAD_REQUEST, "MATCH403", "차단된 사용자끼리의 매칭은 불가능합니다."), // Riot 관련 에러 @@ -133,9 +134,9 @@ public enum ErrorStatus implements BaseErrorCode { TARGET_PENDING_FRIEND_REQUEST_EXIST(HttpStatus.BAD_REQUEST, "FRIEND405", "해당 회원이 나에게 보낸 친구 요청이 수락 대기 중 입니다. 해당 요청을 수락 해주세요."), ALREADY_FRIEND(HttpStatus.BAD_REQUEST, "FRIEND406", - "두 회원은 이미 친구 관계 입니다. 친구 요청을 보낼 수 없습니다."), + "두 회원은 이미 친구 관계 입니다. 친구 요청을 보낼 수 없습니다."), PENDING_FRIEND_REQUEST_NOT_EXIST(HttpStatus.NOT_FOUND, "FRIEND407", - "취소/수락/거절할 친구 요청이 존재하지 않습니다."), + "취소/수락/거절할 친구 요청이 존재하지 않습니다."), MEMBERS_NOT_FRIEND(HttpStatus.BAD_REQUEST, "FRIEND408", "두 회원은 친구 관계가 아닙니다."), ALREADY_STAR_FRIEND(HttpStatus.BAD_REQUEST, "FRIEND409", "이미 즐겨찾기 되어 있는 친구입니다."), NOT_STAR_FRIEND(HttpStatus.BAD_REQUEST, "FRIEND410", "즐겨찾기 되어 있는 친구가 아닙니다."), diff --git a/src/main/java/com/gamegoo/service/matching/MatchingService.java b/src/main/java/com/gamegoo/service/matching/MatchingService.java index 0b61c00e..0326814c 100644 --- a/src/main/java/com/gamegoo/service/matching/MatchingService.java +++ b/src/main/java/com/gamegoo/service/matching/MatchingService.java @@ -13,6 +13,7 @@ import com.gamegoo.dto.matching.MatchingResponse.matchingRequestResponseDTO; import com.gamegoo.dto.matching.MemberPriority; import com.gamegoo.repository.matching.MatchingRecordRepository; +import com.gamegoo.repository.member.BlockRepository; import com.gamegoo.repository.member.MemberRepository; import com.gamegoo.service.member.ProfileService; import lombok.RequiredArgsConstructor; @@ -29,6 +30,7 @@ public class MatchingService { private final MemberRepository memberRepository; private final MatchingRecordRepository matchingRecordRepository; + private final BlockRepository blockRepository; private final ProfileService profileService; /** @@ -41,14 +43,18 @@ public class MatchingService { */ public MatchingResponse.PriorityMatchingResponseDTO getPriorityLists( MatchingRequest.InitializingMatchingRequestDTO request, Long id) throws MemberHandler { + + // 게임 모드가 같고, 5분동안 매칭이 되지 않은 매칭 기록 가져오기 LocalDateTime fiveMinutesAgo = LocalDateTime.now().minusMinutes(5); List matchingRecords = matchingRecordRepository.findTopByCreatedAtAfterAndStatusAndGameModeGroupByMemberId( fiveMinutesAgo, MatchingStatus.PENDING, request.getGameMode()); + + Member member = profileService.findMember(id); + List otherPriorityList = new ArrayList<>(); List myPriorityList = new ArrayList<>(); - Member member = profileService.findMember(id); MatchingRecord myMatchingRecord = MatchingRecord.builder() .member(member) @@ -68,6 +74,12 @@ public MatchingResponse.PriorityMatchingResponseDTO getPriorityLists( // 우선순위 계산하기 for (MatchingRecord record : matchingRecords) { Long otherMemberId = record.getMember().getId(); + + // 서로 차단한 사용자일 경우 우선순위 계산 X + if (blockRepository.existsByBlockerMemberAndBlockedMember(member, record.getMember())) { + continue; + } + if (!id.equals(otherMemberId)) { int otherPriority = calculatePriority(myMatchingRecord, record); myPriorityList.add(new MemberPriority(otherMemberId, otherPriority)); From edbf70186f0713f9645dc007b755c88556e285ff Mon Sep 17 00:00:00 2001 From: Rimi Date: Thu, 29 Aug 2024 02:00:31 +0900 Subject: [PATCH 3/3] =?UTF-8?q?:bug:=20[fix]=20=EB=A7=A4=EB=84=88=EB=A0=88?= =?UTF-8?q?=EB=B2=A8=20=EA=B0=80=EC=A4=91=EC=B9=98=204->3=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gamegoo/service/matching/MatchingService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gamegoo/service/matching/MatchingService.java b/src/main/java/com/gamegoo/service/matching/MatchingService.java index 0326814c..8e99c9c6 100644 --- a/src/main/java/com/gamegoo/service/matching/MatchingService.java +++ b/src/main/java/com/gamegoo/service/matching/MatchingService.java @@ -244,12 +244,12 @@ private int calculatePriority(MatchingRecord myMatchingRecord, } /** - * <매너레벨 가중치> 최대 가중치 16 , 최소 가중치 0 (매너레벨 5, 매너레벨 1 -> (5-1)*4 = 4*4 = 16) + * <매너레벨 가중치> 최대 가중치 12 , 최소 가중치 0 (매너레벨 5, 매너레벨 1 -> (5-1)*3 = 4*3 = 12) */ private int getMannerPriority(Integer otherManner, Integer myManner) { int priority = 0; int mannerDifference = Math.abs(myManner - otherManner); - priority += 16 - mannerDifference * 4; + priority += 12 - mannerDifference * 3; return priority; }