diff --git a/src/main/java/com/nisum/ascend/promotions/controller/PromotionsController.java b/src/main/java/com/nisum/ascend/promotions/controller/PromotionsController.java index 5027b231ad7083d2ec214aa18f2320c9f4fee160..326923511e3094d2a6836c2382d260a10839f1c6 100644 --- a/src/main/java/com/nisum/ascend/promotions/controller/PromotionsController.java +++ b/src/main/java/com/nisum/ascend/promotions/controller/PromotionsController.java @@ -57,8 +57,11 @@ public class PromotionsController { @DeleteMapping("/{promoId}") - public Mono<ResponseEntity<PromotionDto>> deletePromotionById(@PathVariable String promoId){ - //TODO: delete promotion - return null; + public Mono<ResponseEntity<Void>> deletePromotionById(@PathVariable("promoId") String promoId){ + return promotionService.deletePromotion(promoId) + .map(res -> ResponseEntity.ok().<Void>build()) + .defaultIfEmpty(ResponseEntity.notFound().build()); + + } } diff --git a/src/main/java/com/nisum/ascend/promotions/exception/ResourceNotFoundException.java b/src/main/java/com/nisum/ascend/promotions/exception/ResourceNotFoundException.java new file mode 100644 index 0000000000000000000000000000000000000000..6df572e7340ee05ed30e22917bdaeff28fbae08f --- /dev/null +++ b/src/main/java/com/nisum/ascend/promotions/exception/ResourceNotFoundException.java @@ -0,0 +1,15 @@ +package com.nisum.ascend.promotions.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(value = HttpStatus.NOT_FOUND) +public class ResourceNotFoundException extends Exception{ + HttpStatus status; + + public ResourceNotFoundException(HttpStatus status, String message) { + super(message); + this.status = status; + } + + } diff --git a/src/main/java/com/nisum/ascend/promotions/service/PromotionService.java b/src/main/java/com/nisum/ascend/promotions/service/PromotionService.java index 0a2435477ebf25a6b11c0620547588ce6e6d8658..bef693da38bfe36ea8f2ad5a0bca7856ba672f59 100644 --- a/src/main/java/com/nisum/ascend/promotions/service/PromotionService.java +++ b/src/main/java/com/nisum/ascend/promotions/service/PromotionService.java @@ -1,9 +1,11 @@ package com.nisum.ascend.promotions.service; import com.nisum.ascend.promotions.dto.PromotionDto; +import com.nisum.ascend.promotions.exception.ResourceNotFoundException; import com.nisum.ascend.promotions.model.Promotion; import com.nisum.ascend.promotions.repository.PromotionRepository; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import reactor.core.publisher.Flux; import java.util.List; @@ -45,4 +47,12 @@ public class PromotionService { }); } + public Mono<Promotion> deletePromotion(String promoId){ + return promotionRepository.findByPromotionId(promoId) + .flatMap(promo -> promotionRepository.delete(promo) + .then(Mono.just(promo))) + .switchIfEmpty(Mono.error(new ResourceNotFoundException(HttpStatus.NOT_FOUND, "Promo Not Found"))); + + + } } diff --git a/src/test/java/com/nisum/ascend/promotions/controller/PromotionsControllerTest.java b/src/test/java/com/nisum/ascend/promotions/controller/PromotionsControllerTest.java index 505bc23753d1443958962cf341138b6dcd9b11a1..cde8422e9912863bb2d574854aef82c832048451 100644 --- a/src/test/java/com/nisum/ascend/promotions/controller/PromotionsControllerTest.java +++ b/src/test/java/com/nisum/ascend/promotions/controller/PromotionsControllerTest.java @@ -128,6 +128,35 @@ class PromotionsControllerTest { .jsonPath("$.minimumQuantity").isEqualTo(1); } + @Test + void deletePromotion(){ + Promotion promo = new Promotion("deleteTest", "AFP-1", 0.33f, 3); + webTestClient.get() + .uri("/api/promos".concat("/{promoId}"), promo.getPromotionId()) + .exchange() + .expectStatus().isNotFound(); + + webTestClient.post() + .uri("/api/promos") + .contentType(MediaType.valueOf(MediaType.APPLICATION_JSON_VALUE)) + .body(Mono.just(promo),Promotion.class) + .exchange() + .expectStatus().isOk() + .expectBody(Promotion.class); + + webTestClient.delete() + .uri("/api/promos".concat("/{promoId}"),promo.getPromotionId()) + .accept(MediaType.valueOf(MediaType.APPLICATION_JSON_VALUE)) + .exchange() + .expectStatus().isOk() + .expectBody(Void.class); + + webTestClient.get() + .uri("/api/promos".concat("/{promoId}"), promo.getPromotionId()) + .exchange() + .expectStatus().isNotFound(); + } + @Test public void bulkSearchTest(){