From 363a2fca28d3912ee59b699ab4f2bfc93c72334a Mon Sep 17 00:00:00 2001 From: choyoungseo20 Date: Mon, 16 Jun 2025 00:39:21 +0900 Subject: [PATCH] =?UTF-8?q?=EB=A7=A4=EC=B9=AD=20=EC=97=AC=EB=B6=80=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=20API=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/api_payload/ErrorCode.java | 3 +++ .../global/api_payload/SuccessCode.java | 1 + .../controller/MatchingController.java | 9 +++++++++ .../repository/MatchingRepository.java | 7 +++++++ .../matching/service/MatchingService.java | 18 ++++++++++++++++-- 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/silverbridgeX_user/global/api_payload/ErrorCode.java b/src/main/java/com/example/silverbridgeX_user/global/api_payload/ErrorCode.java index 7ebad10..70f7b7a 100644 --- a/src/main/java/com/example/silverbridgeX_user/global/api_payload/ErrorCode.java +++ b/src/main/java/com/example/silverbridgeX_user/global/api_payload/ErrorCode.java @@ -37,6 +37,9 @@ public enum ErrorCode implements BaseCode { TID_NOT_EXIST(HttpStatus.BAD_REQUEST, "PAYMENT_4001", "tid가 존재하지 않습니다."), TID_SID_UNSUPPORTED(HttpStatus.BAD_REQUEST, "PAYMENT_4002", "지원되지 않는 tid, sid 입니다."), SID_NOT_EXIST(HttpStatus.BAD_REQUEST, "PAYMENT_4003", "sid가 존재하지 않습니다."), + + // Match + MATCH_NOT_EXIST(HttpStatus.BAD_REQUEST, "MATCH_4001", "매치 신청 정보가 존재하지 않습니다."), ; private final HttpStatus httpStatus; diff --git a/src/main/java/com/example/silverbridgeX_user/global/api_payload/SuccessCode.java b/src/main/java/com/example/silverbridgeX_user/global/api_payload/SuccessCode.java index 69dd7d9..d390a26 100644 --- a/src/main/java/com/example/silverbridgeX_user/global/api_payload/SuccessCode.java +++ b/src/main/java/com/example/silverbridgeX_user/global/api_payload/SuccessCode.java @@ -33,6 +33,7 @@ public enum SuccessCode implements BaseCode { // MatchRequest MATCH_REQUEST_SUCCESS(HttpStatus.OK, "MATCH_REQUEST_2001", "매치 신청이 완료되었습니다."), + MATCH_VIEW_REQUEST_RESULT_SUCCESS(HttpStatus.OK, "MATCH_REQUEST_2001", "매치 신청 결과 반환 완료되었습니다."), // Payment PAYMENT_URL_CREATE_SUCCESS(HttpStatus.OK, "PAYMENT_2001", "카카오페이 URL을 생성하였습니다."), diff --git a/src/main/java/com/example/silverbridgeX_user/matching/controller/MatchingController.java b/src/main/java/com/example/silverbridgeX_user/matching/controller/MatchingController.java index 9578b17..b150a76 100644 --- a/src/main/java/com/example/silverbridgeX_user/matching/controller/MatchingController.java +++ b/src/main/java/com/example/silverbridgeX_user/matching/controller/MatchingController.java @@ -38,5 +38,14 @@ public ApiResponse matchRequest( return ApiResponse.onSuccess(SuccessCode.MATCH_REQUEST_SUCCESS, true); } + @PostMapping("/results") + public ApiResponse matchRequestResult( + @AuthenticationPrincipal CustomUserDetails customUserDetails + ) { + User user = userService.findByUserName(customUserDetails.getUsername()); + boolean isNotMatched = matchingService.checkMatchRequest(user); + + return ApiResponse.onSuccess(SuccessCode.MATCH_VIEW_REQUEST_RESULT_SUCCESS, !isNotMatched); + } } diff --git a/src/main/java/com/example/silverbridgeX_user/matching/repository/MatchingRepository.java b/src/main/java/com/example/silverbridgeX_user/matching/repository/MatchingRepository.java index 4476daf..d5ec5fa 100644 --- a/src/main/java/com/example/silverbridgeX_user/matching/repository/MatchingRepository.java +++ b/src/main/java/com/example/silverbridgeX_user/matching/repository/MatchingRepository.java @@ -7,9 +7,16 @@ import org.springframework.data.repository.query.Param; import java.util.List; +import java.util.Optional; public interface MatchingRepository extends JpaRepository { @Query("SELECT m FROM MatchRequest m JOIN FETCH m.user WHERE m.status = :status ORDER BY m.createdAt ASC") List findAllWithUserByStatus(@Param("status") MatchStatus status); + + boolean existsByUser_IdAndStatus(Long userId, MatchStatus status); + + boolean existsByUser_Id(Long userId); + + Optional findByUser_Id(Long userId); } diff --git a/src/main/java/com/example/silverbridgeX_user/matching/service/MatchingService.java b/src/main/java/com/example/silverbridgeX_user/matching/service/MatchingService.java index 7ef3846..cad9465 100644 --- a/src/main/java/com/example/silverbridgeX_user/matching/service/MatchingService.java +++ b/src/main/java/com/example/silverbridgeX_user/matching/service/MatchingService.java @@ -1,5 +1,7 @@ package com.example.silverbridgeX_user.matching.service; +import com.example.silverbridgeX_user.global.api_payload.ErrorCode; +import com.example.silverbridgeX_user.global.exception.GeneralException; import com.example.silverbridgeX_user.matching.algorithm.AdjacencyGraphBuilder; import com.example.silverbridgeX_user.matching.algorithm.Matcher; import com.example.silverbridgeX_user.matching.converter.MatchingConverter; @@ -29,15 +31,27 @@ public class MatchingService { private String chatServerUrl; private final MatchingRepository matchingRepository; - private final UserRepository userRepository; @Transactional public void saveMatchRequest(User user) { - MatchRequest matchRequest = MatchingConverter.toMatchRequest(user); + MatchRequest matchRequest; + + if (matchingRepository.existsByUser_Id(user.getId())) { + matchRequest = matchingRepository.findByUser_Id(user.getId()).orElseThrow(() -> new GeneralException(ErrorCode.MATCH_NOT_EXIST)); + matchRequest.updateStatus(MatchStatus.WAITING); + } + else { + matchRequest = MatchingConverter.toMatchRequest(user); + } matchingRepository.save(matchRequest); } + @Transactional + public boolean checkMatchRequest(User user) { + + return matchingRepository.existsByUser_IdAndStatus(user.getId(), MatchStatus.WAITING); + } @Transactional public void executeMatchingAlgorithm() {