Commit 90afae02 authored by Ben Anderson's avatar Ben Anderson

Removed DTO

parent 2164ca44
package com.nisum.ascend.promotions.controller;
import com.nisum.ascend.promotions.dto.PromotionDto;
import com.nisum.ascend.promotions.exception.PromotionNotFoundException;
import com.nisum.ascend.promotions.exception.PromotionAlreadyExistsException;
import com.nisum.ascend.promotions.model.Promotion;
import com.nisum.ascend.promotions.repository.PromotionRepository;
import com.nisum.ascend.promotions.service.PromotionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
......@@ -25,7 +23,7 @@ public class PromotionsController {
PromotionService promotionService;
@GetMapping()
public ResponseEntity<Flux<PromotionDto>> getAllPromotions(@RequestParam(required = false) String sku){
public ResponseEntity<Flux<Promotion>> getAllPromotions(@RequestParam(required = false) String sku){
if (sku != null){
return ResponseEntity.ok(promotionService.findPromotionsByProductSku(sku));
}
......@@ -33,27 +31,27 @@ public class PromotionsController {
}
@GetMapping("/{id}")
public ResponseEntity<Mono<PromotionDto>> getPromotionById(@PathVariable String id){
Mono<PromotionDto> responseData = promotionService
public ResponseEntity<Mono<Promotion>> getPromotionById(@PathVariable String id){
Mono<Promotion> responseData = promotionService
.findPromoById(id)
.switchIfEmpty(Mono.error(new PromotionNotFoundException(id)));
return ResponseEntity.ok().body(responseData);
}
@PostMapping("")
public ResponseEntity<Mono<PromotionDto>> createPromotion(@RequestBody Promotion newPromotion){
Mono<PromotionDto> responseData = promotionService.createPromotion(newPromotion)
public ResponseEntity<Mono<Promotion>> createPromotion(@RequestBody Promotion newPromotion){
Mono<Promotion> responseData = promotionService.createPromotion(newPromotion)
.onErrorResume(throwable -> Mono.error(new PromotionAlreadyExistsException()));
return ResponseEntity.ok(responseData);
}
@PostMapping("/bulkSearch")
public ResponseEntity<Flux<PromotionDto>> bulkSearchPromotionsByItemSku(@RequestBody List<String> skus){
public ResponseEntity<Flux<Promotion>> bulkSearchPromotionsByItemSku(@RequestBody List<String> skus){
return ResponseEntity.ok(promotionService.bulkSearchSku(skus));
}
@PutMapping("/{promoId}")
public Mono<ResponseEntity<PromotionDto>> updatePromotionById(@PathVariable("promoId") String promoId, @RequestBody Promotion newPromotion){
public Mono<ResponseEntity<Promotion>> updatePromotionById(@PathVariable("promoId") String promoId, @RequestBody Promotion newPromotion){
return promotionService.updatePromotion(promoId,newPromotion)
.map(updatedProduct -> ResponseEntity.ok(updatedProduct))
.defaultIfEmpty(ResponseEntity.badRequest().build());
......
package com.nisum.ascend.promotions.dto;
import com.nisum.ascend.promotions.model.Promotion;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public class PromotionDto {
private String promotionId;
private String productSku;
private float discountPercentage;
private int minimumQuantity;
public static PromotionDto generateDtoFromPromotion(Promotion p) {
return new PromotionDto(p.getPromotionId(), p.getProductSku(), p.getDiscountPercentage(),
p.getMinimumQuantity());
}
public PromotionDto() {}
}
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;
......@@ -17,33 +16,32 @@ public class PromotionService {
@Autowired
PromotionRepository promotionRepository;
public Flux<PromotionDto> findAll(){
return promotionRepository.findAll().map(PromotionDto::generateDtoFromPromotion);
public Flux<Promotion> findAll(){
return promotionRepository.findAll();
}
public Mono<PromotionDto> findPromoById(String promoId) {
return promotionRepository.findByPromotionId(promoId)
.map(PromotionDto::generateDtoFromPromotion);
public Mono<Promotion> findPromoById(String promoId) {
return promotionRepository.findByPromotionId(promoId);
}
public Flux<PromotionDto> findPromotionsByProductSku(String sku){
return promotionRepository.findByProductSku(sku).map(PromotionDto::generateDtoFromPromotion);
public Flux<Promotion> findPromotionsByProductSku(String sku){
return promotionRepository.findByProductSku(sku);
}
public Flux<PromotionDto> bulkSearchSku(List<String> skus){
public Flux<Promotion> bulkSearchSku(List<String> skus){
return Flux.fromIterable(skus).flatMap(sku -> findPromotionsByProductSku(sku));
}
public Mono<PromotionDto> createPromotion(Promotion promotion){
return promotionRepository.save(promotion).map(PromotionDto::generateDtoFromPromotion);
public Mono<Promotion> createPromotion(Promotion promotion){
return promotionRepository.save(promotion);
}
public Mono<PromotionDto> updatePromotion(String promoId, Promotion promotion){
public Mono<Promotion> updatePromotion(String promoId, Promotion promotion){
return promotionRepository.findByPromotionId(promoId)
.flatMap(promo ->{
promo.setDiscountPercentage(promotion.getDiscountPercentage());
promo.setProductSku(promotion.getProductSku());
promo.setMinimumQuantity(promotion.getMinimumQuantity());
return promotionRepository.save(promo).map(PromotionDto::generateDtoFromPromotion);
return promotionRepository.save(promo);
});
}
......
package com.nisum.ascend.promotions.controller;
import com.nisum.ascend.promotions.dto.PromotionDto;
import com.nisum.ascend.promotions.model.Promotion;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.BeforeEach;
......@@ -44,9 +43,9 @@ class PromotionsControllerTest {
webTestClient.get().uri("/api/promos").exchange()
.expectStatus().isOk()
.expectHeader().contentType(MediaType.APPLICATION_JSON_VALUE)
.expectBodyList(PromotionDto.class)
.expectBodyList(Promotion.class)
.consumeWith(promo ->{
List<PromotionDto> promos = promo.getResponseBody();
List<Promotion> promos = promo.getResponseBody();
assert promos != null;
promos.forEach(p ->{
assertNotNull(p.getPromotionId());
......@@ -90,10 +89,10 @@ class PromotionsControllerTest {
.exchange()
.expectStatus().isOk()
.expectHeader().contentType(MediaType.APPLICATION_JSON_VALUE)
.expectBodyList(PromotionDto.class)
.expectBodyList(Promotion.class)
.hasSize(1)
.consumeWith(promo ->{
List<PromotionDto> promos = promo.getResponseBody();
List<Promotion> promos = promo.getResponseBody();
assert promos != null;
promos.forEach(p -> assertEquals(skuWithOnePromo, p.getProductSku()));
});
......@@ -106,10 +105,10 @@ class PromotionsControllerTest {
.exchange()
.expectStatus().isOk()
.expectHeader().contentType(MediaType.APPLICATION_JSON_VALUE)
.expectBodyList(PromotionDto.class)
.expectBodyList(Promotion.class)
.hasSize(2)
.consumeWith(promo ->{
List<PromotionDto> promos = promo.getResponseBody();
List<Promotion> promos = promo.getResponseBody();
assert promos != null;
promos.forEach(p -> assertEquals(skuWithMultiplePromos, p.getProductSku()));
});
......@@ -168,9 +167,9 @@ class PromotionsControllerTest {
.body(Mono.just(skus), List.class)
.exchange()
.expectStatus().isOk()
.expectBodyList(PromotionDto.class)
.expectBodyList(Promotion.class)
.consumeWith(promo ->{
List<PromotionDto> promos = promo.getResponseBody();
List<Promotion> promos = promo.getResponseBody();
assert promos != null;
promos.forEach(p -> {
String sku = p.getProductSku();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment