Skip to content

Commit

Permalink
Merge pull request #97 from Leets-Official/refactor/#90/수동매칭-수락-거절-구현
Browse files Browse the repository at this point in the history
Refactor #97 수동매칭 수락 거절 구현
  • Loading branch information
huncozyboy authored Feb 4, 2025
2 parents eea6e02 + 4ece73a commit e7a33ec
Show file tree
Hide file tree
Showing 7 changed files with 45 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import static com.gachtaxi.domain.matching.common.controller.ResponseMessage.LEAVE_MANUAL_MATCHING_ROOM_SUCCESS;
import static org.springframework.http.HttpStatus.OK;

import com.gachtaxi.domain.matching.common.dto.request.ManualMatchingInviteReplyRequest;
import com.gachtaxi.domain.matching.common.dto.request.ManualMatchingJoinRequest;
import com.gachtaxi.domain.matching.common.dto.request.ManualMatchingRequest;
import com.gachtaxi.domain.matching.common.dto.response.MatchingRoomListResponse;
Expand All @@ -27,7 +28,6 @@
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@Tag(name = "MANUAL", description = "수동매칭 API")
Expand All @@ -53,11 +53,10 @@ public ApiResponse<Void> joinManualMatchingRoom(@CurrentMemberId Long userId, @V
return ApiResponse.response(OK, JOIN_MANUAL_MATCHING_ROOM_SUCCESS.getMessage());
}

@Operation(summary = "수동 매칭 초대 수락")
@PostMapping("/invite/accept")
public ApiResponse<Void> acceptInvitation(@CurrentMemberId Long userId, @RequestParam Long matchingRoomId, @RequestParam String notificationId
) {
matchingInvitationService.acceptInvitation(userId, matchingRoomId, notificationId);
@Operation(summary = "수동 매칭 초대 수락/거절")
@PostMapping("/invite/reply")
public ApiResponse<Void> acceptInvitation(@CurrentMemberId Long userId, @Valid @RequestBody ManualMatchingInviteReplyRequest request) {
matchingInvitationService.acceptInvitation(userId, request);
return ApiResponse.response(OK, ACCEPT_MATCHING_INVITE_SUCCESS.getMessage());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public enum ResponseMessage {
CONVERT_TO_AUTO_MATCHING_SUCCESS("자동 매칭으로 전환되었습니다."),
GET_MANUAL_MATCHING_LIST_SUCCESS("수동 매칭방 조회에 성공했습니다."),
GET_MY_MATCHING_LIST_SUCCESS("내 매칭방 조회에 성공했습니다."),
ACCEPT_MATCHING_INVITE_SUCCESS("매칭방 초대 수락에 성공했습니다");
ACCEPT_MATCHING_INVITE_SUCCESS("매칭방 초대를 수락/거절이 완료되었습니다");

private final String message;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.gachtaxi.domain.matching.common.dto.request;

import com.gachtaxi.domain.matching.common.entity.enums.MatchingInviteStatus;
import jakarta.validation.constraints.NotNull;

public record ManualMatchingInviteReplyRequest(
@NotNull
Long matchingRoomId,
@NotNull
String notificationId,
@NotNull
MatchingInviteStatus status
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ public record MatchingPageableResponse(
int pageNumber,
int pageSize,
int numberOfElements,
boolean isLast
boolean last
) {
public static MatchingPageableResponse of(Slice<?> Slice) {
public static MatchingPageableResponse of(Slice<?> slice) {
return MatchingPageableResponse.builder()
.pageNumber(Slice.getNumber())
.pageSize(Slice.getSize())
.numberOfElements(Slice.getNumberOfElements())
.isLast(Slice.isLast())
.pageNumber(slice.getNumber())
.pageSize(slice.getSize())
.numberOfElements(slice.getNumberOfElements())
.last(slice.isLast())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ public record MatchingRoomListResponse(
List<MatchingRoomResponse> rooms,
MatchingPageableResponse pageable
) {
public static MatchingRoomListResponse of(Slice<MatchingRoomResponse> Slice) {
public static MatchingRoomListResponse of(Slice<MatchingRoomResponse> slice) {
return MatchingRoomListResponse.builder()
.rooms(Slice.getContent())
.pageable(MatchingPageableResponse.of(Slice))
.rooms(slice.getContent().stream().toList())
.pageable(MatchingPageableResponse.of(slice))
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.gachtaxi.domain.matching.common.entity.enums;

public enum MatchingInviteStatus {
ACCEPT, REJECT
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package com.gachtaxi.domain.matching.common.service;

import static com.gachtaxi.domain.notification.entity.enums.NotificationType.MATCH_INVITE;

import com.gachtaxi.domain.matching.common.dto.request.ManualMatchingInviteReplyRequest;
import com.gachtaxi.domain.matching.common.entity.MatchingRoom;
import com.gachtaxi.domain.matching.common.entity.MemberMatchingRoomChargingInfo;
import com.gachtaxi.domain.matching.common.entity.enums.MatchingInviteStatus;
import com.gachtaxi.domain.matching.common.exception.AlreadyInMatchingRoomException;
import com.gachtaxi.domain.matching.common.exception.MatchingRoomAlreadyFullException;
import com.gachtaxi.domain.matching.common.exception.NoSuchInvitationException;
Expand Down Expand Up @@ -62,18 +63,23 @@ public void sendMatchingInvitation(Members sender, List<String> friendNicknames,
수동 매칭시 친구 초대 수락
*/
@Transactional
public void acceptInvitation(Long userId, Long matchingRoomId, String notificationId) {
public void acceptInvitation(Long userId, ManualMatchingInviteReplyRequest request) {
Members member = memberService.findById(userId);
MatchingRoom matchingRoom = matchingRoomRepository.findById(matchingRoomId)
MatchingRoom matchingRoom = matchingRoomRepository.findById(request.matchingRoomId())
.orElseThrow(NoSuchMatchingRoomException::new);

Notification notification = notificationService.find(notificationId);
Notification notification = notificationService.find(request.notificationId());

MatchingInvitePayload payload = (MatchingInvitePayload) notification.getPayload();
if (!payload.getMatchingRoomId().equals(matchingRoomId)) {
if (!payload.getMatchingRoomId().equals(request.matchingRoomId())) {
throw new NoSuchInvitationException();
}

if (request.status() == MatchingInviteStatus.REJECT) {
notificationRepository.delete(notification);
return;
}

notificationRepository.save(notification);

if (notificationRepository.countByReceiverIdAndType(userId, NotificationType.MATCH_INVITE) == 0) {
Expand Down

0 comments on commit e7a33ec

Please sign in to comment.