diff --git a/RestroHub/src/main/java/com/restroly/qrmenu/category/controller/CategoryController.java b/RestroHub/src/main/java/com/restroly/qrmenu/category/controller/CategoryController.java index 52d56b82..44fa4c83 100644 --- a/RestroHub/src/main/java/com/restroly/qrmenu/category/controller/CategoryController.java +++ b/RestroHub/src/main/java/com/restroly/qrmenu/category/controller/CategoryController.java @@ -59,6 +59,12 @@ public ResponseEntity> deleteCategory(@PathVariable Long id) { return ResponseEntity.ok(ApiResponse.success(null, "Category deleted (soft-deleted) successfully")); } + @PutMapping("/restore/{id}") + public ResponseEntity> restoreCategory(@PathVariable Long id) { + CategoryResponseDTO restored = categoryService.restoreCategory(id); + return ResponseEntity.ok(ApiResponse.success(restored, "Category restored successfully")); + } + @GetMapping("/activecategories") public ResponseEntity>> getActiveCategories( @PageableDefault(page = 0, size = 10, sort = "name") Pageable pageable) { diff --git a/RestroHub/src/main/java/com/restroly/qrmenu/category/service/CategoryService.java b/RestroHub/src/main/java/com/restroly/qrmenu/category/service/CategoryService.java index 3bbd2a45..34cda54f 100644 --- a/RestroHub/src/main/java/com/restroly/qrmenu/category/service/CategoryService.java +++ b/RestroHub/src/main/java/com/restroly/qrmenu/category/service/CategoryService.java @@ -18,6 +18,8 @@ public interface CategoryService { public void deleteCategory(Long id); + public CategoryResponseDTO restoreCategory(Long id); + public Page getActiveCategories(Pageable pageable); } \ No newline at end of file diff --git a/RestroHub/src/main/java/com/restroly/qrmenu/category/service/CategoryServiceImpl.java b/RestroHub/src/main/java/com/restroly/qrmenu/category/service/CategoryServiceImpl.java index f699fe1f..d8d459d6 100644 --- a/RestroHub/src/main/java/com/restroly/qrmenu/category/service/CategoryServiceImpl.java +++ b/RestroHub/src/main/java/com/restroly/qrmenu/category/service/CategoryServiceImpl.java @@ -110,6 +110,29 @@ public void deleteCategory(Long id) { categoryRepository.save(existingCategory); } + /* ======================= + RESTORE SOFT-DELETED CATEGORY + ======================= */ + @Override + @Transactional + public CategoryResponseDTO restoreCategory(Long id) { + log.debug("Restoring category with ID: {}", id); + Category existingCategory = categoryRepository.findById(id) + .orElseThrow(() -> + new ResourceNotFoundException("Category", "id", id)); + + if (Boolean.FALSE.equals(existingCategory.getIsDelete())) { + log.warn("Category with ID: {} is already active", id); + return CategoryResponseDTO.fromEntity(existingCategory); + } + + existingCategory.setIsDelete(false); + existingCategory.setUpdatedDate(LocalDateTime.now()); + Category restored = categoryRepository.save(existingCategory); + log.info("Category with ID: {} restored successfully", id); + return CategoryResponseDTO.fromEntity(restored); + } + @Override @Transactional(readOnly = true) public Page getActiveCategories(Pageable pageable) {