Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Fix/194] 매칭 수정사항 변경 및 ErrorStatus 변경 #195

Merged
merged 3 commits into from
Sep 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 17 additions & 16 deletions src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java
Original file line number Diff line number Diff line change
Expand Up @@ -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 관련 에러
Expand Down Expand Up @@ -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", "즐겨찾기 되어 있는 친구가 아닙니다."),
Expand Down
23 changes: 18 additions & 5 deletions src/main/java/com/gamegoo/service/matching/MatchingService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -29,6 +30,7 @@ public class MatchingService {

private final MemberRepository memberRepository;
private final MatchingRecordRepository matchingRecordRepository;
private final BlockRepository blockRepository;
private final ProfileService profileService;

/**
Expand All @@ -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<MatchingRecord> matchingRecords = matchingRecordRepository.findTopByCreatedAtAfterAndStatusAndGameModeGroupByMemberId(
fiveMinutesAgo, MatchingStatus.PENDING, request.getGameMode());

Member member = profileService.findMember(id);

List<MemberPriority> otherPriorityList = new ArrayList<>();
List<MemberPriority> myPriorityList = new ArrayList<>();

Member member = profileService.findMember(id);

MatchingRecord myMatchingRecord = MatchingRecord.builder()
.member(member)
Expand All @@ -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;
Comment on lines +78 to +80
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

그럼 차단한 사용자끼리는 우선순위 점수가 0점이 아니라 아예 그냥 계산 제외가 되는 것일까요?!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

앗 네넵 맞아요!

}

if (!id.equals(otherMemberId)) {
int otherPriority = calculatePriority(myMatchingRecord, record);
myPriorityList.add(new MemberPriority(otherMemberId, otherPriority));
Expand Down Expand Up @@ -140,8 +152,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;
}

Expand Down Expand Up @@ -231,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;
}

Expand Down
Loading