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)); }