From 93d418d4adc1a6dff96e379e3803362f2f9596de Mon Sep 17 00:00:00 2001 From: yjr Date: Sun, 17 May 2026 15:06:39 +0900 Subject: [PATCH 1/4] =?UTF-8?q?refactor:=20event=20issue=20request=20body?= =?UTF-8?q?=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/event/controller/EventController.java | 13 ++++++++----- .../domain/event/dto/EventCouponIssueRequest.java | 9 +++++++++ .../domain/event/dto/EventVerifyQrRequest.java | 8 ++++++++ 3 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/soongsil/CoffeeChat/domain/event/dto/EventCouponIssueRequest.java create mode 100644 src/main/java/com/soongsil/CoffeeChat/domain/event/dto/EventVerifyQrRequest.java diff --git a/src/main/java/com/soongsil/CoffeeChat/domain/event/controller/EventController.java b/src/main/java/com/soongsil/CoffeeChat/domain/event/controller/EventController.java index ce10d87..524ccb1 100644 --- a/src/main/java/com/soongsil/CoffeeChat/domain/event/controller/EventController.java +++ b/src/main/java/com/soongsil/CoffeeChat/domain/event/controller/EventController.java @@ -2,6 +2,9 @@ import java.util.Map; +import com.soongsil.CoffeeChat.domain.event.dto.EventCouponIssueRequest; +import com.soongsil.CoffeeChat.domain.event.dto.EventVerifyQrRequest; +import jakarta.validation.Valid; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.core.Authentication; @@ -82,8 +85,9 @@ public ResponseEntity generateQr( "EVENT_403_2: 멘티가 아님 | EVENT_403_3: 타인 커피챗 스캔 | EVENT_403_4: 참여 횟수 초과(2회)", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) public ResponseEntity> verifyQr( - @RequestParam String qrToken, Authentication authentication) { - couponService.verifyQrToken(authentication.getName(), qrToken); + @Valid @RequestBody EventVerifyQrRequest request, + Authentication authentication) { + couponService.verifyQrToken(authentication.getName(), request.qrToken()); return ResponseEntity.ok(ApiResponse.onSuccessOK(null)); } @@ -112,11 +116,10 @@ public ResponseEntity> verifyQr( description = "EVENT_503: 동시성 처리 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) public ResponseEntity>> issueCoupon( - @RequestParam String qrToken, - @RequestParam String storePin, + @Valid @RequestBody EventCouponIssueRequest request, Authentication authentication) { String couponNumber = - couponService.verifyPinAndIssueCoupon(authentication.getName(), qrToken, storePin); + couponService.verifyPinAndIssueCoupon(authentication.getName(), request.qrToken(), request.storePin()); return ResponseEntity.ok(ApiResponse.onSuccessOK(Map.of("couponNumber", couponNumber))); } diff --git a/src/main/java/com/soongsil/CoffeeChat/domain/event/dto/EventCouponIssueRequest.java b/src/main/java/com/soongsil/CoffeeChat/domain/event/dto/EventCouponIssueRequest.java new file mode 100644 index 0000000..35a311d --- /dev/null +++ b/src/main/java/com/soongsil/CoffeeChat/domain/event/dto/EventCouponIssueRequest.java @@ -0,0 +1,9 @@ +package com.soongsil.CoffeeChat.domain.event.dto; + +import jakarta.validation.constraints.NotBlank; + +public record EventCouponIssueRequest ( + @NotBlank String qrToken, + @NotBlank String storePin +){ +} diff --git a/src/main/java/com/soongsil/CoffeeChat/domain/event/dto/EventVerifyQrRequest.java b/src/main/java/com/soongsil/CoffeeChat/domain/event/dto/EventVerifyQrRequest.java new file mode 100644 index 0000000..72c21f1 --- /dev/null +++ b/src/main/java/com/soongsil/CoffeeChat/domain/event/dto/EventVerifyQrRequest.java @@ -0,0 +1,8 @@ +package com.soongsil.CoffeeChat.domain.event.dto; + +import jakarta.validation.constraints.NotBlank; + +public record EventVerifyQrRequest( + @NotBlank String qrToken +) { +} From 54a0187cf725c8f728785b2c06c1fc4c00a70045 Mon Sep 17 00:00:00 2001 From: yjr Date: Sun, 17 May 2026 15:08:29 +0900 Subject: [PATCH 2/4] =?UTF-8?q?refactor:=20coupon=20service=20watchdog=20?= =?UTF-8?q?=ED=99=9C=EC=84=B1=ED=99=94=20=EB=B0=8F=20global=20=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CoffeeChat/domain/event/service/CouponService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/soongsil/CoffeeChat/domain/event/service/CouponService.java b/src/main/java/com/soongsil/CoffeeChat/domain/event/service/CouponService.java index e33bb1e..1368c8a 100644 --- a/src/main/java/com/soongsil/CoffeeChat/domain/event/service/CouponService.java +++ b/src/main/java/com/soongsil/CoffeeChat/domain/event/service/CouponService.java @@ -190,7 +190,7 @@ public String verifyPinAndIssueCoupon(String username, String qrToken, String in RLock lock = redissonClient.getLock(lockKey); try { - if (!lock.tryLock(3, 3, TimeUnit.SECONDS)) { + if (!lock.tryLock(3, TimeUnit.SECONDS)) { throw new GlobalException(GlobalErrorCode.EVENT_CONCURRENCY_ERROR); } @@ -229,7 +229,7 @@ public String verifyPinAndIssueCoupon(String username, String qrToken, String in } catch (InterruptedException e) { Thread.currentThread().interrupt(); - throw new IllegalStateException("동시성 처리 중 인터럽트가 발생했습니다."); + throw new GlobalException(GlobalErrorCode.EVENT_CONCURRENCY_ERROR); } finally { if (lock.isLocked() && lock.isHeldByCurrentThread()) { lock.unlock(); From 95e909bf8565205b82c9089a61839b0948fc7f4b Mon Sep 17 00:00:00 2001 From: yjr Date: Sun, 17 May 2026 15:19:36 +0900 Subject: [PATCH 3/4] =?UTF-8?q?refactor:=20assigned=20coupons=20name=20tri?= =?UTF-8?q?m=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/assignedcoupon/service/AssignedCouponService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/soongsil/CoffeeChat/domain/assignedcoupon/service/AssignedCouponService.java b/src/main/java/com/soongsil/CoffeeChat/domain/assignedcoupon/service/AssignedCouponService.java index f652c17..15bf647 100644 --- a/src/main/java/com/soongsil/CoffeeChat/domain/assignedcoupon/service/AssignedCouponService.java +++ b/src/main/java/com/soongsil/CoffeeChat/domain/assignedcoupon/service/AssignedCouponService.java @@ -71,7 +71,7 @@ public AssignedCouponRegisterResult registerTargets(List Date: Sun, 17 May 2026 15:38:02 +0900 Subject: [PATCH 4/4] =?UTF-8?q?fix:=20registerTarget=20name=20npe=20?= =?UTF-8?q?=EC=9C=84=ED=97=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/assignedcoupon/service/AssignedCouponService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/soongsil/CoffeeChat/domain/assignedcoupon/service/AssignedCouponService.java b/src/main/java/com/soongsil/CoffeeChat/domain/assignedcoupon/service/AssignedCouponService.java index 15bf647..9a3ff6f 100644 --- a/src/main/java/com/soongsil/CoffeeChat/domain/assignedcoupon/service/AssignedCouponService.java +++ b/src/main/java/com/soongsil/CoffeeChat/domain/assignedcoupon/service/AssignedCouponService.java @@ -71,7 +71,7 @@ public AssignedCouponRegisterResult registerTargets(List