From d4cf7d5e703864af23beec8dc9c746cbd9e87705 Mon Sep 17 00:00:00 2001 From: mii2026 Date: Wed, 1 Jan 2025 02:55:33 +0900 Subject: [PATCH] =?UTF-8?q?[feat=20#100]=20=EA=B2=8C=EC=9D=B4=ED=8A=B8?= =?UTF-8?q?=EC=9B=A8=EC=9D=B4=20=EB=8C=80=EA=B8=B0=EC=97=B4=20=EC=B2=B4?= =?UTF-8?q?=ED=81=AC=20=ED=95=84=ED=84=B0=EC=97=90=20=EC=A2=8C=EC=84=9D=20?= =?UTF-8?q?=EC=84=A0=EC=A0=90=20API,=20=EC=A3=BC=EB=AC=B8=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gateway/infrastructure/config/RouteConfig.java | 4 +++- .../gateway/infrastructure/filter/ApiType.java | 13 ++++++++++--- .../infrastructure/filter/QueueCheckFilter.java | 2 +- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/gateway/src/main/java/com/ticketPing/gateway/infrastructure/config/RouteConfig.java b/gateway/src/main/java/com/ticketPing/gateway/infrastructure/config/RouteConfig.java index 176cf356..6e3180cf 100644 --- a/gateway/src/main/java/com/ticketPing/gateway/infrastructure/config/RouteConfig.java +++ b/gateway/src/main/java/com/ticketPing/gateway/infrastructure/config/RouteConfig.java @@ -26,7 +26,9 @@ public RouteLocator gatewayRoutes(RouteLocatorBuilder builder) { .filters(f -> addCircuitBreaker(f, "userServiceCircuitBreaker", "default")) .uri("lb://user")) .route("performance-service", r -> r.path("/api/v1/performances/**", "/api/v1/schedules/**", "/api/v1/seats/**") - .filters(f -> addCircuitBreaker(f, "performanceServiceCircuitBreaker", "default")) + .filters(f -> f.filter(queueCheckFilter::filter) + .circuitBreaker(c -> c.setName("performanceServiceCircuitBreaker") + .setFallbackUri("forward:/fallback/default"))) .uri("lb://performance")) .route("order-service", r -> r.path("/api/v1/orders/**") .filters(f -> f.filter(queueCheckFilter::filter) diff --git a/gateway/src/main/java/com/ticketPing/gateway/infrastructure/filter/ApiType.java b/gateway/src/main/java/com/ticketPing/gateway/infrastructure/filter/ApiType.java index 65db36ca..309d569d 100644 --- a/gateway/src/main/java/com/ticketPing/gateway/infrastructure/filter/ApiType.java +++ b/gateway/src/main/java/com/ticketPing/gateway/infrastructure/filter/ApiType.java @@ -2,21 +2,28 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpMethod; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; +import org.springframework.util.AntPathMatcher; +@Slf4j @Getter @RequiredArgsConstructor public enum ApiType { ENTER_WAITING_QUEUE("/api/v1/waiting-queue", HttpMethod.POST), GET_QUEUE_INFO("/api/v1/waiting-queue", HttpMethod.GET), - CREATE_ORDER("/api/v1/orders", HttpMethod.POST); + PRE_RESERVE_SEAT("/api/v1/seats/**/pre-reserve", HttpMethod.POST), + CREATE_ORDER("/api/v1/orders", HttpMethod.POST), + VALIDATE_ORDER("/api/v1/orders/**/validate", HttpMethod.POST); private final String path; private final HttpMethod method; + private static final AntPathMatcher pathMatcher = new AntPathMatcher(); + public static Mono findByRequest(String requestPath, String httpMethod) { return Flux.fromArray(ApiType.values()) .filter(api -> api.matches(requestPath, httpMethod)) @@ -25,7 +32,7 @@ public static Mono findByRequest(String requestPath, String httpMethod) } private boolean matches(String requestPath, String httpMethod) { - return requestPath.equals(this.path) && this.method.name().equals(httpMethod); + return pathMatcher.match(this.path, requestPath) && this.method.name().equals(httpMethod); } -} +} \ No newline at end of file diff --git a/gateway/src/main/java/com/ticketPing/gateway/infrastructure/filter/QueueCheckFilter.java b/gateway/src/main/java/com/ticketPing/gateway/infrastructure/filter/QueueCheckFilter.java index d3dc4a67..ef7dfbb8 100644 --- a/gateway/src/main/java/com/ticketPing/gateway/infrastructure/filter/QueueCheckFilter.java +++ b/gateway/src/main/java/com/ticketPing/gateway/infrastructure/filter/QueueCheckFilter.java @@ -33,7 +33,7 @@ public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { switch (api) { case ENTER_WAITING_QUEUE -> handleEnterWaitingQueueApi(exchange, chain); case GET_QUEUE_INFO -> handleGetQueueInfoApi(exchange, chain); - case CREATE_ORDER -> handleCreateOrderApi(exchange, chain); + case PRE_RESERVE_SEAT, CREATE_ORDER, VALIDATE_ORDER -> handleCreateOrderApi(exchange, chain); }) .switchIfEmpty(chain.filter(exchange)); }