Skip to content

Commit

Permalink
Merge pull request #168 from Gamegoo-repo/feat/167
Browse files Browse the repository at this point in the history
[Feat/167] 친구 요청 취소 API 구현
  • Loading branch information
rimi3226 authored Aug 15, 2024
2 parents 95071b5 + aca1eed commit 54fc7a6
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,8 @@ public enum ErrorStatus implements BaseErrorCode {
"해당 회원이 나에게 보낸 친구 요청이 수락 대기 중 입니다. 해당 요청을 수락 해주세요."),
ALREADY_FRIEND(HttpStatus.BAD_REQUEST, "FRIEND406",
"두 회원은 이미 친구 관계 입니다. 친구 요청을 보낼 수 없습니다."),
PENDING_FRIEND_REQUEST_NOT_EXIST(HttpStatus.NOT_FOUND, "FRIEND407", "수락/거절할 친구 요청이 존재하지 않습니다."),
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
18 changes: 18 additions & 0 deletions src/main/java/com/gamegoo/controller/member/FriendController.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,24 @@ public ApiResponse<MemberResponse.friendRequestResultDTO> sendFriendRequest(

}

@Operation(summary = "친구 요청 취소 API", description = "대상 회원에게 보낸 친구 요청을 취소하는 API 입니다.")
@Parameter(name = "memberId", description = "친구 요청을 취소할 대상 회원의 id 입니다.")
@DeleteMapping("/request/{memberId}")
public ApiResponse<MemberResponse.friendRequestResultDTO> cancelFriendRequest(
@PathVariable(name = "memberId") Long targetMemberId) {
Long memberId = JWTUtil.getCurrentUserId();

friendService.cancelFriendRequest(memberId, targetMemberId);

MemberResponse.friendRequestResultDTO result = friendRequestResultDTO.builder()
.targetMemberId(targetMemberId)
.result("친구 요청 취소 성공")
.build();

return ApiResponse.onSuccess(result);

}

@Operation(summary = "친구 요청 수락 API", description = "대상 회원이 보낸 친구 요청을 수락 처리하는 API 입니다.")
@Parameter(name = "memberId", description = "친구 요청을 수락할 대상 회원의 id 입니다.")
@PatchMapping("/request/{memberId}/accept")
Expand Down
31 changes: 30 additions & 1 deletion src/main/java/com/gamegoo/service/member/FriendService.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public List<Friend> getFriends(Long memberId) {
friendList.sort(
(f1, f2) -> SortUtil.memberNameComparator.compare(f1.getToMember().getGameName(),
f2.getToMember().getGameName()));

return friendList;
}

Expand Down Expand Up @@ -112,6 +112,35 @@ public void sendFriendRequest(Long memberId, Long targetMemberId) {
member.getGameName(), member.getId(), targetMember);
}

/**
* member -> targetMember로 요청한 FriendRequest를 CANCELLED 처리
*
* @param memberId
* @param targetMemberId
*/
public void cancelFriendRequest(Long memberId, Long targetMemberId) {
Member member = profileService.findMember(memberId);

Member targetMember = profileService.findMember(targetMemberId);

// targetMember로 나 자신을 요청한 경우
if (member.equals(targetMember)) {
throw new FriendHandler(ErrorStatus.FRIEND_BAD_REQUEST);
}

// 수락 대기 상태인 FriendRequest 엔티티 조회
Optional<FriendRequests> pendingFriendRequest = friendRequestsRepository.findByFromMemberAndToMemberAndStatus(
member, targetMember, FriendRequestStatus.PENDING);

// 수락 대기 중인 친구 요청이 존재하지 않는 경우
if (pendingFriendRequest.isEmpty()) {
throw new FriendHandler(ErrorStatus.PENDING_FRIEND_REQUEST_NOT_EXIST);
}

// FriendRequest 엔티티 상태 변경
pendingFriendRequest.get().updateStatus(FriendRequestStatus.CANCELLED);
}

/**
* targetMember -> member로 요청한 FriendRequest를 ACCEPTED 처리
*
Expand Down

0 comments on commit 54fc7a6

Please sign in to comment.