From 28f102c25d86ab31385dc3d0edda1f3b8114a484 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=A4=80=ED=98=B8?= <2171168@hansung.ac.kr> Date: Thu, 25 Sep 2025 00:24:34 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=83=81=ED=92=88=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/products/controller/ProductController.java | 6 ++++++ .../DecodEat/domain/products/service/ProductService.java | 5 +++++ .../com/DecodEat/global/config/WebOAuthSecurityConfig.java | 3 ++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/DecodEat/domain/products/controller/ProductController.java b/src/main/java/com/DecodEat/domain/products/controller/ProductController.java index ef0bb6c..ded23c5 100644 --- a/src/main/java/com/DecodEat/domain/products/controller/ProductController.java +++ b/src/main/java/com/DecodEat/domain/products/controller/ProductController.java @@ -137,4 +137,10 @@ public ApiResponse> get return ApiResponse.onSuccess(productService.getMyLikedProducts(user, pageable)); } + @DeleteMapping("/{productId}") + @Operation(summary = "상품 삭제", description = "해당 상품과 관련된 모든 데이터가 삭제됩니다.") + public ApiResponse deleteProduct( @PathVariable Long productId) { + return ApiResponse.onSuccess(productService.deleteProduct(productId)); + } + } diff --git a/src/main/java/com/DecodEat/domain/products/service/ProductService.java b/src/main/java/com/DecodEat/domain/products/service/ProductService.java index eb0bae9..14f1e57 100644 --- a/src/main/java/com/DecodEat/domain/products/service/ProductService.java +++ b/src/main/java/com/DecodEat/domain/products/service/ProductService.java @@ -454,4 +454,9 @@ public ProductLikeResponseDTO addOrUpdateLike(Long userId, Long productId) { } return ProductConverter.toProductLikeDTO(productId, isLiked); } + + public String deleteProduct(Long productId) { + productRepository.deleteById(productId); + return productId.toString()+"번 상품이 삭제되었습니다."; + } } \ No newline at end of file diff --git a/src/main/java/com/DecodEat/global/config/WebOAuthSecurityConfig.java b/src/main/java/com/DecodEat/global/config/WebOAuthSecurityConfig.java index c411fa7..bade92c 100644 --- a/src/main/java/com/DecodEat/global/config/WebOAuthSecurityConfig.java +++ b/src/main/java/com/DecodEat/global/config/WebOAuthSecurityConfig.java @@ -58,8 +58,9 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti // .anyRequest().permitAll()); .requestMatchers("/img/**", "/css/**", "/js/**", "/favicon.ico", "/error").permitAll() .requestMatchers("/swagger-ui/**","/v3/api-docs/**").permitAll() //누구나 가능 - .requestMatchers("/api/token", "/api/products/latest","/api/products/search/**","/api/products/recommendation/**").permitAll() //누구나 가능 + .requestMatchers("/api/token", "/api/products/latest","/api/products/search/**","/api/products/recommendation/**","api/products/").permitAll() //누구나 가능 .requestMatchers(new RegexRequestMatcher("^/api/products/\\d+$", "GET")).permitAll() + .requestMatchers(new RegexRequestMatcher("^/api/products/\\d+$", "DELETE")).permitAll() .requestMatchers("/api/users/**").hasAnyRole("USER", "ADMIN") // 유저 관련 API는 USER 또는 ADMIN 권한 필요 .requestMatchers("/api/admin/**").hasRole("ADMIN") // 어드민 관련 API는 ADMIN 권한만 가능 .anyRequest().authenticated()); // 나머지 요청은 인증 필요