Skip to content

Commit 3de152f

Browse files
authored
Merge pull request #349 from GTable/feature/#348-Waiting-Rebuild
Refactor : User 웨이팅 등록 및 삭제 기능 리팩토링
2 parents 36e895d + ca8feec commit 3de152f

25 files changed

Lines changed: 955 additions & 204 deletions

File tree

nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/exception/GlobalExceptionHandler.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import com.nowait.domaincorerdb.order.exception.OrderParameterEmptyException;
4444
import com.nowait.domaincorerdb.order.exception.OrderUpdateUnauthorizedException;
4545
import com.nowait.domaincorerdb.order.exception.OrderViewUnauthorizedException;
46+
import com.nowait.domaincorerdb.reservation.exception.AlreadyDeletedWaitingException;
4647
import com.nowait.domaincorerdb.reservation.exception.DuplicateReservationException;
4748
import com.nowait.domaincorerdb.reservation.exception.InvalidReservationParameterException;
4849
import com.nowait.domaincorerdb.reservation.exception.InvalidReservationStatusTransitionException;
@@ -54,7 +55,6 @@
5455
import com.nowait.domaincorerdb.reservation.exception.ReservationUpdateUnauthorizedException;
5556
import com.nowait.domaincorerdb.reservation.exception.ReservationViewUnauthorizedException;
5657
import com.nowait.domaincorerdb.reservation.exception.UnsupportedReservationStatusException;
57-
import com.nowait.domaincorerdb.reservation.exception.UserWaitingLimitExceededException;
5858
import com.nowait.domaincorerdb.store.exception.StoreDeleteUnauthorizedException;
5959
import com.nowait.domaincorerdb.store.exception.StoreImageEmptyException;
6060
import com.nowait.domaincorerdb.store.exception.StoreImageNotFoundException;
@@ -325,12 +325,13 @@ public ErrorResponse unsupportedReservationStatusException(UnsupportedReservatio
325325
return new ErrorResponse(e.getMessage(), UNSUPPORTED_RESERVATION_STATUS.getCode());
326326
}
327327

328-
@ResponseStatus(BAD_REQUEST)
329-
@ExceptionHandler(UserWaitingLimitExceededException.class)
330-
public ErrorResponse userWaitingLimitExceededException(UserWaitingLimitExceededException e, WebRequest request) {
328+
329+
@ResponseStatus(CONFLICT)
330+
@ExceptionHandler(AlreadyDeletedWaitingException.class)
331+
public ErrorResponse alreadyDeletedWaitingException(AlreadyDeletedWaitingException e, WebRequest request) {
331332
alarm(e, request);
332-
log.error("userWaitingLimitExceededException", e);
333-
return new ErrorResponse(e.getMessage(), USER_WAITING_LIMIT_EXCEEDED.getCode());
333+
log.error("alreadyDeletedWaitingException", e);
334+
return new ErrorResponse(e.getMessage(), ALREADY_DELETED_RESERVATION.getCode());
334335
}
335336

336337

nowait-app-user-api/build.gradle

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ dependencies {
4040

4141
// SPRING SECURITY
4242
implementation 'org.springframework.boot:spring-boot-starter-security'
43-
testImplementation 'org.springframework.boot:spring-boot-starter-test'
4443
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
4544

4645
// jwt
@@ -85,4 +84,4 @@ dependencies {
8584

8685
test {
8786
useJUnitPlatform()
88-
}
87+
}

nowait-app-user-api/src/main/java/com/nowait/applicationuser/exception/GlobalExceptionHandler.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,17 @@
2828
import com.nowait.domaincorerdb.order.exception.DuplicateOrderException;
2929
import com.nowait.domaincorerdb.order.exception.OrderItemsEmptyException;
3030
import com.nowait.domaincorerdb.order.exception.OrderParameterEmptyException;
31+
import com.nowait.domaincorerdb.reservation.exception.AlreadyDeletedWaitingException;
3132
import com.nowait.domaincorerdb.reservation.exception.DuplicateReservationException;
3233
import com.nowait.domaincorerdb.reservation.exception.ReservationAddUnauthorizedException;
3334
import com.nowait.domaincorerdb.reservation.exception.ReservationNotFoundException;
3435
import com.nowait.domaincorerdb.reservation.exception.ReservationNumberIssueFailException;
35-
import com.nowait.domaincorerdb.reservation.exception.UserWaitingLimitExceededException;
3636
import com.nowait.domaincorerdb.store.exception.StoreNotFoundException;
3737
import com.nowait.domaincorerdb.store.exception.StoreWaitingDisabledException;
3838
import com.nowait.domaincorerdb.storepayment.exception.StorePaymentNotFoundException;
3939
import com.nowait.domaincorerdb.token.exception.BusinessException;
4040
import com.nowait.domaincorerdb.user.exception.UserNotFoundException;
41+
import com.nowait.domaincoreredis.reservation.exception.UserWaitingLimitExceededException;
4142
import com.nowait.domainuserrdb.bookmark.exception.AlreadyDeletedBookmarkException;
4243
import com.nowait.domainuserrdb.bookmark.exception.BookmarkNotFoundException;
4344
import com.nowait.domainuserrdb.bookmark.exception.BookmarkOwnerMismatchException;
@@ -223,6 +224,14 @@ public ErrorResponse duplicateReservationException(DuplicateReservationException
223224
return new ErrorResponse(e.getMessage(), DUPLICATE_RESERVATION.getCode());
224225
}
225226

227+
@ResponseStatus(CONFLICT)
228+
@ExceptionHandler(AlreadyDeletedWaitingException.class)
229+
public ErrorResponse alreadyWaitingException(AlreadyDeletedWaitingException e, WebRequest request) {
230+
alarm(e, request);
231+
log.error("alreadyWaitingException", e);
232+
return new ErrorResponse(e.getMessage(), ALREADY_DELETED_RESERVATION.getCode());
233+
}
234+
226235
@ResponseStatus(BAD_REQUEST)
227236
@ExceptionHandler(StoreWaitingDisabledException.class)
228237
public ErrorResponse storeWaitingDisabledException(StoreWaitingDisabledException e, WebRequest request) {

nowait-app-user-api/src/main/java/com/nowait/applicationuser/reservation/service/ReservationService.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.nowait.applicationuser.reservation.service;
22

3-
import static com.nowait.common.exception.ErrorMessage.*;
4-
53
import java.time.Duration;
64
import java.time.Instant;
75
import java.time.LocalDateTime;
@@ -36,7 +34,6 @@
3634
import com.nowait.domaincorerdb.reservation.exception.ReservationAddUnauthorizedException;
3735
import com.nowait.domaincorerdb.reservation.exception.ReservationNotFoundException;
3836
import com.nowait.domaincorerdb.reservation.exception.ReservationNumberIssueFailException;
39-
import com.nowait.domaincorerdb.reservation.exception.UserWaitingLimitExceededException;
4037
import com.nowait.domaincorerdb.reservation.repository.ReservationRepository;
4138
import com.nowait.domaincorerdb.store.entity.ImageType;
4239
import com.nowait.domaincorerdb.store.entity.Store;
@@ -49,6 +46,7 @@
4946
import com.nowait.domaincorerdb.user.exception.UserNotFoundException;
5047
import com.nowait.domaincorerdb.user.repository.UserRepository;
5148
import com.nowait.domaincoreredis.common.util.RedisKeyUtils;
49+
import com.nowait.domaincoreredis.reservation.exception.UserWaitingLimitExceededException;
5250
import com.nowait.domaincoreredis.reservation.repository.WaitingPermitLuaRepository;
5351
import com.nowait.domainuserrdb.oauth.dto.CustomOAuth2User;
5452

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package com.nowait.applicationuser.waiting.controller;
2+
3+
import org.springframework.http.ResponseEntity;
4+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
5+
import org.springframework.web.bind.annotation.DeleteMapping;
6+
import org.springframework.web.bind.annotation.PathVariable;
7+
import org.springframework.web.bind.annotation.PostMapping;
8+
import org.springframework.web.bind.annotation.RequestBody;
9+
import org.springframework.web.bind.annotation.RequestMapping;
10+
import org.springframework.web.bind.annotation.RestController;
11+
12+
import com.nowait.applicationuser.waiting.dto.CancelWaitingRequest;
13+
import com.nowait.applicationuser.waiting.dto.CancelWaitingResponse;
14+
import com.nowait.applicationuser.waiting.dto.RegisterWaitingRequest;
15+
import com.nowait.applicationuser.waiting.dto.RegisterWaitingResponse;
16+
import com.nowait.applicationuser.waiting.service.WaitingService;
17+
import com.nowait.common.api.ApiUtils;
18+
import com.nowait.domainuserrdb.oauth.dto.CustomOAuth2User;
19+
20+
import io.swagger.v3.oas.annotations.Operation;
21+
import io.swagger.v3.oas.annotations.tags.Tag;
22+
import jakarta.servlet.http.HttpServletRequest;
23+
import lombok.RequiredArgsConstructor;
24+
25+
@Tag(name = "Waiting API", description = "예약 API -리팩토링 중-")
26+
@RestController
27+
@RequestMapping("/v2/users/me/waitings")
28+
@RequiredArgsConstructor
29+
public class WaitingController {
30+
private final WaitingService waitingService;
31+
32+
/**
33+
* 대기열 리팩토링용 API
34+
*/
35+
@PostMapping("/{publicCode}")
36+
@Operation(summary = "대기열 리팩토링용 API", description = "대기열 리팩토링용 API")
37+
public ResponseEntity<?> registerWaiting(
38+
@AuthenticationPrincipal CustomOAuth2User customOAuth2User,
39+
@PathVariable String publicCode,
40+
@RequestBody RegisterWaitingRequest request,
41+
HttpServletRequest httpServletRequest
42+
) {
43+
RegisterWaitingResponse registerWaitingResponse = waitingService.registerWaiting(
44+
customOAuth2User,
45+
publicCode,
46+
request,
47+
httpServletRequest
48+
);
49+
50+
return ResponseEntity
51+
.ok()
52+
.body(
53+
ApiUtils.success(
54+
registerWaitingResponse
55+
)
56+
);
57+
}
58+
59+
@DeleteMapping("/{publicCode}")
60+
@Operation(summary = "대기열 리팩토링용 API", description = "대기 취소")
61+
public ResponseEntity<?> cancelWaiting(
62+
@AuthenticationPrincipal CustomOAuth2User customOAuth2User,
63+
@PathVariable String publicCode,
64+
@RequestBody CancelWaitingRequest request
65+
) {
66+
CancelWaitingResponse cancelWaitingResponse = waitingService.cancelWaiting(
67+
customOAuth2User,
68+
publicCode,
69+
request
70+
);
71+
72+
return ResponseEntity
73+
.ok()
74+
.body(
75+
ApiUtils.success(
76+
cancelWaitingResponse
77+
)
78+
);
79+
}
80+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.nowait.applicationuser.waiting.dto;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import lombok.NoArgsConstructor;
6+
7+
@Getter
8+
@NoArgsConstructor
9+
@AllArgsConstructor
10+
public class CancelWaitingRequest {
11+
private String waitingNumber;
12+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.nowait.applicationuser.waiting.dto;
2+
3+
import java.time.LocalDateTime;
4+
5+
import com.nowait.common.enums.ReservationStatus;
6+
7+
import lombok.Builder;
8+
import lombok.Getter;
9+
10+
@Getter
11+
@Builder
12+
public class CancelWaitingResponse {
13+
private String waitingNumber;
14+
private Long storeId;
15+
private ReservationStatus reservationStatus;
16+
private LocalDateTime canceledAt;
17+
private String message;
18+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.nowait.applicationuser.waiting.dto;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import lombok.NoArgsConstructor;
6+
7+
@Getter
8+
@NoArgsConstructor
9+
@AllArgsConstructor
10+
public class RegisterWaitingRequest {
11+
private Integer partySize;
12+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.nowait.applicationuser.waiting.dto;
2+
3+
import lombok.Builder;
4+
import lombok.Getter;
5+
6+
@Getter
7+
@Builder
8+
public class RegisterWaitingResponse {
9+
private final String waitingNumber;
10+
private final int partySize;
11+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.nowait.applicationuser.waiting.dto;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import lombok.NoArgsConstructor;
6+
7+
@Getter
8+
@NoArgsConstructor
9+
@AllArgsConstructor
10+
public class WaitingIdempotencyValue {
11+
private String state;
12+
private RegisterWaitingResponse response;
13+
}

0 commit comments

Comments
 (0)