From 9934b7dc6812cc07da9aa3ef1a82a35c589adfbc Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Sun, 10 Aug 2025 21:10:56 +0900 Subject: [PATCH 01/14] =?UTF-8?q?MOSU-270=20refactor:=20=EC=A0=84=ED=99=94?= =?UTF-8?q?=EB=B2=88=ED=98=B8=EB=A1=9C=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EA=B2=80=EC=A6=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/auth/processor/SignUpAccountStepProcessor.java | 2 +- .../application/oauth/OAuthUserPersistenceProcessor.java | 2 +- .../mosuserver/domain/user/repository/UserJpaRepository.java | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/life/mosu/mosuserver/application/auth/processor/SignUpAccountStepProcessor.java b/src/main/java/life/mosu/mosuserver/application/auth/processor/SignUpAccountStepProcessor.java index bab8cb99..c3ad882e 100644 --- a/src/main/java/life/mosu/mosuserver/application/auth/processor/SignUpAccountStepProcessor.java +++ b/src/main/java/life/mosu/mosuserver/application/auth/processor/SignUpAccountStepProcessor.java @@ -18,7 +18,7 @@ public class SignUpAccountStepProcessor implements StepProcessor { existingUser.updateOAuthUser( info.gender(), diff --git a/src/main/java/life/mosu/mosuserver/domain/user/repository/UserJpaRepository.java b/src/main/java/life/mosu/mosuserver/domain/user/repository/UserJpaRepository.java index cd553965..e5038a33 100644 --- a/src/main/java/life/mosu/mosuserver/domain/user/repository/UserJpaRepository.java +++ b/src/main/java/life/mosu/mosuserver/domain/user/repository/UserJpaRepository.java @@ -10,8 +10,9 @@ public interface UserJpaRepository extends JpaRepository { boolean existsByLoginId(String loginId); - Optional findByNameAndPhoneNumber(String name, String phoneNumber); Optional findByPhoneNumber(String phoneNumber); + + boolean existsByPhoneNumber(String phoneNumber); } From 2521b111aab4388d6261f5660d8624a3b9eeec03 Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Sun, 10 Aug 2025 21:11:13 +0900 Subject: [PATCH 02/14] =?UTF-8?q?MOSU-270=20refactor:=20=EC=84=B1=EB=B3=84?= =?UTF-8?q?=20=EC=9D=91=EB=8B=B5=20Custom?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../life/mosu/mosuserver/domain/profile/entity/Gender.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/life/mosu/mosuserver/domain/profile/entity/Gender.java b/src/main/java/life/mosu/mosuserver/domain/profile/entity/Gender.java index 74f03bf7..e31a1fe1 100644 --- a/src/main/java/life/mosu/mosuserver/domain/profile/entity/Gender.java +++ b/src/main/java/life/mosu/mosuserver/domain/profile/entity/Gender.java @@ -1,6 +1,8 @@ package life.mosu.mosuserver.domain.profile.entity; import java.util.Arrays; +import life.mosu.mosuserver.global.exception.CustomRuntimeException; +import life.mosu.mosuserver.global.exception.ErrorCode; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -18,6 +20,6 @@ public static Gender fromName(String genderName) { .filter(g -> g.getGenderName().equals(genderName)) .findFirst() .orElseThrow( - () -> new IllegalArgumentException("Invalid gender name: " + genderName)); + () -> new CustomRuntimeException(ErrorCode.INVALID_GENDER)); } } From 0a9d3abd15be8e6bc1eeeda8320149ad8fe46749 Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Sun, 10 Aug 2025 21:36:58 +0900 Subject: [PATCH 03/14] =?UTF-8?q?MOSU-273=20feat:=20=EB=93=B1=EB=A1=9D?= =?UTF-8?q?=EB=90=9C=20=EC=A0=84=ED=99=94=EB=B2=88=ED=98=B8=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mosuserver/application/user/UserService.java | 4 ++++ .../presentation/user/UserController.java | 14 +++++++++++++- .../presentation/user/UserControllerDocs.java | 2 +- .../IsLoginIdAvailableResponse.java | 2 +- .../response/IsPhoneNumberAvailableResponse.java | 10 ++++++++++ 5 files changed, 29 insertions(+), 3 deletions(-) rename src/main/java/life/mosu/mosuserver/presentation/user/dto/{request => response}/IsLoginIdAvailableResponse.java (79%) create mode 100644 src/main/java/life/mosu/mosuserver/presentation/user/dto/response/IsPhoneNumberAvailableResponse.java diff --git a/src/main/java/life/mosu/mosuserver/application/user/UserService.java b/src/main/java/life/mosu/mosuserver/application/user/UserService.java index 39c9a663..be991f70 100644 --- a/src/main/java/life/mosu/mosuserver/application/user/UserService.java +++ b/src/main/java/life/mosu/mosuserver/application/user/UserService.java @@ -51,4 +51,8 @@ public UserInfoResponse getUserInfo(Long userId) { return UserInfoResponse.from(user); } + + public Boolean isPhoneNumberAvailable(String phoneNumber) { + return !userJpaRepository.existsByPhoneNumber(phoneNumber); + } } diff --git a/src/main/java/life/mosu/mosuserver/presentation/user/UserController.java b/src/main/java/life/mosu/mosuserver/presentation/user/UserController.java index ca87dbdd..045b978f 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/user/UserController.java +++ b/src/main/java/life/mosu/mosuserver/presentation/user/UserController.java @@ -1,10 +1,12 @@ package life.mosu.mosuserver.presentation.user; import life.mosu.mosuserver.application.user.UserService; +import life.mosu.mosuserver.global.annotation.PhoneNumberPattern; import life.mosu.mosuserver.global.annotation.UserId; import life.mosu.mosuserver.global.util.ApiResponseWrapper; -import life.mosu.mosuserver.presentation.user.dto.request.IsLoginIdAvailableResponse; import life.mosu.mosuserver.presentation.user.dto.response.CustomerKeyResponse; +import life.mosu.mosuserver.presentation.user.dto.response.IsLoginIdAvailableResponse; +import life.mosu.mosuserver.presentation.user.dto.response.IsPhoneNumberAvailableResponse; import life.mosu.mosuserver.presentation.user.dto.response.UserInfoResponse; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; @@ -55,4 +57,14 @@ public ResponseEntity> isLoginIdA IsLoginIdAvailableResponse.from(isLoginIdAvailable))); } + @GetMapping("/check-phoneNumber") + public ResponseEntity> isPhoneNumberAvailable( + @PhoneNumberPattern @RequestParam String phoneNumber + ) { + Boolean isPhoneNumberAvailable = userService.isPhoneNumberAvailable(phoneNumber); + + return ResponseEntity.ok( + ApiResponseWrapper.success(HttpStatus.OK, "User PhoneNumber 등록 가능 여부 조회 성공", + IsPhoneNumberAvailableResponse.from(isPhoneNumberAvailable))); + } } diff --git a/src/main/java/life/mosu/mosuserver/presentation/user/UserControllerDocs.java b/src/main/java/life/mosu/mosuserver/presentation/user/UserControllerDocs.java index a7263050..e547129f 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/user/UserControllerDocs.java +++ b/src/main/java/life/mosu/mosuserver/presentation/user/UserControllerDocs.java @@ -9,8 +9,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import life.mosu.mosuserver.global.annotation.UserId; import life.mosu.mosuserver.global.util.ApiResponseWrapper; -import life.mosu.mosuserver.presentation.user.dto.request.IsLoginIdAvailableResponse; import life.mosu.mosuserver.presentation.user.dto.response.CustomerKeyResponse; +import life.mosu.mosuserver.presentation.user.dto.response.IsLoginIdAvailableResponse; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestParam; diff --git a/src/main/java/life/mosu/mosuserver/presentation/user/dto/request/IsLoginIdAvailableResponse.java b/src/main/java/life/mosu/mosuserver/presentation/user/dto/response/IsLoginIdAvailableResponse.java similarity index 79% rename from src/main/java/life/mosu/mosuserver/presentation/user/dto/request/IsLoginIdAvailableResponse.java rename to src/main/java/life/mosu/mosuserver/presentation/user/dto/response/IsLoginIdAvailableResponse.java index 81854a7f..48a0aa70 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/user/dto/request/IsLoginIdAvailableResponse.java +++ b/src/main/java/life/mosu/mosuserver/presentation/user/dto/response/IsLoginIdAvailableResponse.java @@ -1,4 +1,4 @@ -package life.mosu.mosuserver.presentation.user.dto.request; +package life.mosu.mosuserver.presentation.user.dto.response; public record IsLoginIdAvailableResponse( Boolean isLoginIdAvailable diff --git a/src/main/java/life/mosu/mosuserver/presentation/user/dto/response/IsPhoneNumberAvailableResponse.java b/src/main/java/life/mosu/mosuserver/presentation/user/dto/response/IsPhoneNumberAvailableResponse.java new file mode 100644 index 00000000..91a5ff05 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/presentation/user/dto/response/IsPhoneNumberAvailableResponse.java @@ -0,0 +1,10 @@ +package life.mosu.mosuserver.presentation.user.dto.response; + +public record IsPhoneNumberAvailableResponse( + Boolean isPhoneNumberAvailable +) { + + public static IsPhoneNumberAvailableResponse from(Boolean isPhoneNumberAvailable) { + return new IsPhoneNumberAvailableResponse(isPhoneNumberAvailable); + } +} From 6527121fdd64300d2c92d2ef764014f27399e937 Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Sun, 10 Aug 2025 21:37:22 +0900 Subject: [PATCH 04/14] =?UTF-8?q?MOSU-273=20feat:=20=EB=93=B1=EB=A1=9D?= =?UTF-8?q?=EB=90=9C=20=EC=A0=84=ED=99=94=EB=B2=88=ED=98=B8=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=20Whitelist=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/life/mosu/mosuserver/global/filter/Whitelist.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/life/mosu/mosuserver/global/filter/Whitelist.java b/src/main/java/life/mosu/mosuserver/global/filter/Whitelist.java index 5f70c3b5..54080e3e 100644 --- a/src/main/java/life/mosu/mosuserver/global/filter/Whitelist.java +++ b/src/main/java/life/mosu/mosuserver/global/filter/Whitelist.java @@ -41,6 +41,8 @@ public enum Whitelist { FAQ("/api/v1/faq", WhitelistMethod.GET), NOTICE("/api/v1/notice", WhitelistMethod.GET), USER_ID_CHECK("/api/v1/user/check-id", WhitelistMethod.GET), + USER_PHONE_NUMBER_CHECK("/api/v1/user/check-phoneNumber", WhitelistMethod.GET), + CUSTOMER_KEY_CHECK("/api/v1/user/customer-key", WhitelistMethod.GET), EXAM("/api/v1/exam", WhitelistMethod.GET), EXAM_AREAS("/api/v1/exam/areas", WhitelistMethod.GET), From 5de298d96d3c28ed576db2806c8b460a9c15ef83 Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Mon, 11 Aug 2025 02:44:08 +0900 Subject: [PATCH 05/14] =?UTF-8?q?MOSU-273=20fix:=20DataIntegrityViolationE?= =?UTF-8?q?xception=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/auth/processor/SignUpAccountStepProcessor.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/life/mosu/mosuserver/application/auth/processor/SignUpAccountStepProcessor.java b/src/main/java/life/mosu/mosuserver/application/auth/processor/SignUpAccountStepProcessor.java index c3ad882e..6adfd03c 100644 --- a/src/main/java/life/mosu/mosuserver/application/auth/processor/SignUpAccountStepProcessor.java +++ b/src/main/java/life/mosu/mosuserver/application/auth/processor/SignUpAccountStepProcessor.java @@ -18,7 +18,8 @@ public class SignUpAccountStepProcessor implements StepProcessor Date: Mon, 11 Aug 2025 02:44:33 +0900 Subject: [PATCH 06/14] =?UTF-8?q?MOSU-273=20fix:=20=ED=9C=B4=EB=8C=80?= =?UTF-8?q?=ED=8F=B0=20=EB=B2=88=ED=98=B8=20=ED=99=95=EC=9D=B8=20=EC=97=94?= =?UTF-8?q?=EB=93=9C=20=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/life/mosu/mosuserver/global/filter/Whitelist.java | 2 +- .../life/mosu/mosuserver/presentation/user/UserController.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/life/mosu/mosuserver/global/filter/Whitelist.java b/src/main/java/life/mosu/mosuserver/global/filter/Whitelist.java index 54080e3e..79f15d58 100644 --- a/src/main/java/life/mosu/mosuserver/global/filter/Whitelist.java +++ b/src/main/java/life/mosu/mosuserver/global/filter/Whitelist.java @@ -41,7 +41,7 @@ public enum Whitelist { FAQ("/api/v1/faq", WhitelistMethod.GET), NOTICE("/api/v1/notice", WhitelistMethod.GET), USER_ID_CHECK("/api/v1/user/check-id", WhitelistMethod.GET), - USER_PHONE_NUMBER_CHECK("/api/v1/user/check-phoneNumber", WhitelistMethod.GET), + USER_PHONE_NUMBER_CHECK("/api/v1/user/check-phone-number", WhitelistMethod.GET), CUSTOMER_KEY_CHECK("/api/v1/user/customer-key", WhitelistMethod.GET), EXAM("/api/v1/exam", WhitelistMethod.GET), diff --git a/src/main/java/life/mosu/mosuserver/presentation/user/UserController.java b/src/main/java/life/mosu/mosuserver/presentation/user/UserController.java index 045b978f..d7ec7790 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/user/UserController.java +++ b/src/main/java/life/mosu/mosuserver/presentation/user/UserController.java @@ -57,7 +57,7 @@ public ResponseEntity> isLoginIdA IsLoginIdAvailableResponse.from(isLoginIdAvailable))); } - @GetMapping("/check-phoneNumber") + @GetMapping("/check-phone-number") public ResponseEntity> isPhoneNumberAvailable( @PhoneNumberPattern @RequestParam String phoneNumber ) { From e6b5d5896ca80b32e21daa1e993d44168c12078a Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Mon, 11 Aug 2025 02:55:43 +0900 Subject: [PATCH 07/14] =?UTF-8?q?MOSU-273=20fix:=20=EA=B2=80=EC=A6=9D=20?= =?UTF-8?q?=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20import=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../life/mosu/mosuserver/presentation/user/UserController.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/life/mosu/mosuserver/presentation/user/UserController.java b/src/main/java/life/mosu/mosuserver/presentation/user/UserController.java index f4e5af6a..016bb936 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/user/UserController.java +++ b/src/main/java/life/mosu/mosuserver/presentation/user/UserController.java @@ -1,6 +1,8 @@ package life.mosu.mosuserver.presentation.user; import life.mosu.mosuserver.application.user.UserService; +import life.mosu.mosuserver.global.annotation.LoginIdPattern; +import life.mosu.mosuserver.global.annotation.PhoneNumberPattern; import life.mosu.mosuserver.global.annotation.UserId; import life.mosu.mosuserver.global.util.ApiResponseWrapper; import life.mosu.mosuserver.presentation.user.dto.response.CustomerKeyResponse; From 0373d2b49899d48110864aaa70a89ba36f138a25 Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Mon, 11 Aug 2025 02:56:46 +0900 Subject: [PATCH 08/14] =?UTF-8?q?MOSU-273=20refactor:=20API=20=EC=97=B0?= =?UTF-8?q?=EB=8F=99=EC=9D=84=20=EC=9C=84=ED=95=9C=20=EC=9E=84=EC=8B=9C=20?= =?UTF-8?q?secure=20false?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../life/mosu/mosuserver/global/util/CookieBuilderUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java b/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java index 7f5ea9aa..b34fc5e9 100644 --- a/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java +++ b/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java @@ -65,7 +65,7 @@ public static String createLocalCookieString(String name, String value, Long max public static ResponseCookie createDevelopResponseCookie(String name, String value, Long maxAge) { return createBaseResponseCookieBuilder(name, value, maxAge) - .secure(true) + .secure(false) .domain(".mosuedu.com") .sameSite("Strict") .build(); @@ -81,7 +81,7 @@ public static ResponseCookie createDevelopResponseCookie(String name, String val */ public static Cookie createDevelopCookie(String name, String value, Long maxAge) { Cookie cookie = createBaseServletCookie(name, value, maxAge); - cookie.setSecure(true); + cookie.setSecure(false); cookie.setDomain(".mosuedu.com"); return cookie; } From 95e6ff880202cee00c05ae73d065e70efc4633a8 Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Mon, 11 Aug 2025 03:10:42 +0900 Subject: [PATCH 09/14] =?UTF-8?q?MOSU=20refactor:=20=EC=BF=A0=ED=82=A4=20d?= =?UTF-8?q?omain=20dev.mosuedu.com=20=EC=9C=BC=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../life/mosu/mosuserver/global/util/CookieBuilderUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java b/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java index b34fc5e9..4dda32c6 100644 --- a/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java +++ b/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java @@ -66,7 +66,7 @@ public static ResponseCookie createDevelopResponseCookie(String name, String val Long maxAge) { return createBaseResponseCookieBuilder(name, value, maxAge) .secure(false) - .domain(".mosuedu.com") + .domain("dev.mosuedu.com") .sameSite("Strict") .build(); } @@ -82,7 +82,7 @@ public static ResponseCookie createDevelopResponseCookie(String name, String val public static Cookie createDevelopCookie(String name, String value, Long maxAge) { Cookie cookie = createBaseServletCookie(name, value, maxAge); cookie.setSecure(false); - cookie.setDomain(".mosuedu.com"); + cookie.setDomain("dev.mosuedu.com"); return cookie; } From a63a58b2cdc0be1e75f69130dcdeefbf3722d3dc Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Mon, 11 Aug 2025 03:48:57 +0900 Subject: [PATCH 10/14] =?UTF-8?q?MOSU=20refactor:=20=EC=BF=A0=ED=82=A4=20d?= =?UTF-8?q?omain=20.mosuedu.com=20=EC=9C=BC=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 --- .../life/mosu/mosuserver/global/util/CookieBuilderUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java b/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java index 4dda32c6..b34fc5e9 100644 --- a/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java +++ b/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java @@ -66,7 +66,7 @@ public static ResponseCookie createDevelopResponseCookie(String name, String val Long maxAge) { return createBaseResponseCookieBuilder(name, value, maxAge) .secure(false) - .domain("dev.mosuedu.com") + .domain(".mosuedu.com") .sameSite("Strict") .build(); } @@ -82,7 +82,7 @@ public static ResponseCookie createDevelopResponseCookie(String name, String val public static Cookie createDevelopCookie(String name, String value, Long maxAge) { Cookie cookie = createBaseServletCookie(name, value, maxAge); cookie.setSecure(false); - cookie.setDomain("dev.mosuedu.com"); + cookie.setDomain(".mosuedu.com"); return cookie; } From 91ddf3a27d9a9cfca3bb64f4f98e6a87ee21b959 Mon Sep 17 00:00:00 2001 From: KNU-K Date: Mon, 11 Aug 2025 04:10:45 +0900 Subject: [PATCH 11/14] feat: add method to calculate refund amount in RefundService --- .../mosuserver/application/refund/RefundService.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/life/mosu/mosuserver/application/refund/RefundService.java b/src/main/java/life/mosu/mosuserver/application/refund/RefundService.java index ffd8d406..2cbbff09 100644 --- a/src/main/java/life/mosu/mosuserver/application/refund/RefundService.java +++ b/src/main/java/life/mosu/mosuserver/application/refund/RefundService.java @@ -10,10 +10,12 @@ import life.mosu.mosuserver.global.exception.ErrorCode; import life.mosu.mosuserver.infra.toss.dto.CancelTossPaymentResponse; import life.mosu.mosuserver.presentation.refund.dto.MergedRefundRequest; +import life.mosu.mosuserver.presentation.refund.dto.RefundAmountResponse; import life.mosu.mosuserver.presentation.refund.dto.RefundRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -28,6 +30,16 @@ public class RefundService { private final TossRefundProcessor tossRefundProcessor; private final PaymentJpaRepository paymentJpaRepository; + @Transactional(propagation = Propagation.SUPPORTS, readOnly = true) + public RefundAmountResponse getRefundAmount(String paymentKey, Long examApplicationId) { + PaymentWithLunchProjection targetPayment = findPaymentOrThrow(paymentKey, + examApplicationId); + + int totalQuantity = getTotalPaymentCount(paymentKey); + int refundAmount = calculateRefundAmount(totalQuantity, targetPayment.lunchChecked()); + return RefundAmountResponse.of(refundAmount); + } + @Transactional public void doProcess(Long userId, MergedRefundRequest request) { RefundRequest details = request.details(); From f783688bcd4b909e44e4d8ca41f7a686b8effbe5 Mon Sep 17 00:00:00 2001 From: KNU-K Date: Mon, 11 Aug 2025 04:10:51 +0900 Subject: [PATCH 12/14] feat: add endpoint to retrieve refund amount in RefundController --- .../presentation/refund/RefundController.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/life/mosu/mosuserver/presentation/refund/RefundController.java b/src/main/java/life/mosu/mosuserver/presentation/refund/RefundController.java index 85688606..ce09a8e4 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/refund/RefundController.java +++ b/src/main/java/life/mosu/mosuserver/presentation/refund/RefundController.java @@ -4,16 +4,19 @@ import life.mosu.mosuserver.global.annotation.UserId; import life.mosu.mosuserver.global.util.ApiResponseWrapper; import life.mosu.mosuserver.presentation.refund.dto.MergedRefundRequest; +import life.mosu.mosuserver.presentation.refund.dto.RefundAmountResponse; import life.mosu.mosuserver.presentation.refund.dto.RefundRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; 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; @RestController @@ -24,6 +27,15 @@ public class RefundController { private final RefundService refundService; + @GetMapping() + ResponseEntity> getRefundAmount( + @RequestParam(required = true) String paymentKey, + @RequestParam(required = true) Long examApplicationId) { + var response = refundService.getRefundAmount(paymentKey, examApplicationId); + return ResponseEntity.ok( + ApiResponseWrapper.success(HttpStatus.OK, "환불 금액 조회 성공", response)); + } + @PostMapping("/{paymentKey}") @PreAuthorize("isAuthenticated() and hasRole('USER')") ResponseEntity> process( From 13a6ca90bbd9430b014317d44fbce16ddad31791 Mon Sep 17 00:00:00 2001 From: KNU-K Date: Mon, 11 Aug 2025 04:11:00 +0900 Subject: [PATCH 13/14] feat: add RefundAmountResponse DTO for refund amount response --- .../presentation/refund/dto/RefundAmountResponse.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/life/mosu/mosuserver/presentation/refund/dto/RefundAmountResponse.java diff --git a/src/main/java/life/mosu/mosuserver/presentation/refund/dto/RefundAmountResponse.java b/src/main/java/life/mosu/mosuserver/presentation/refund/dto/RefundAmountResponse.java new file mode 100644 index 00000000..2cfd00f8 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/presentation/refund/dto/RefundAmountResponse.java @@ -0,0 +1,11 @@ +package life.mosu.mosuserver.presentation.refund.dto; + +public record RefundAmountResponse( + int amount +) { + + public static RefundAmountResponse of(int amount) { + return new RefundAmountResponse(amount); + } + +} From 96f7f5f0a469cd9097327f25248a4c6a40b33dcd Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Mon, 11 Aug 2025 04:12:21 +0900 Subject: [PATCH 14/14] =?UTF-8?q?MOSU=20refactor:=20=EC=BF=A0=ED=82=A4=20p?= =?UTF-8?q?rod=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../life/mosu/mosuserver/global/util/CookieBuilderUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java b/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java index b34fc5e9..7f5ea9aa 100644 --- a/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java +++ b/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java @@ -65,7 +65,7 @@ public static String createLocalCookieString(String name, String value, Long max public static ResponseCookie createDevelopResponseCookie(String name, String value, Long maxAge) { return createBaseResponseCookieBuilder(name, value, maxAge) - .secure(false) + .secure(true) .domain(".mosuedu.com") .sameSite("Strict") .build(); @@ -81,7 +81,7 @@ public static ResponseCookie createDevelopResponseCookie(String name, String val */ public static Cookie createDevelopCookie(String name, String value, Long maxAge) { Cookie cookie = createBaseServletCookie(name, value, maxAge); - cookie.setSecure(false); + cookie.setSecure(true); cookie.setDomain(".mosuedu.com"); return cookie; }