Commit 8930fcef authored by Ben Anderson's avatar Ben Anderson

Removed DTO

parent 8b421221
apiVersion: apps/v1
kind: Deployment
metadata:
name: afp-products-deployment
spec:
replicas: 2
selector:
matchLabels:
app: afp-products
template:
metadata:
labels:
app: afp-products
spec:
containers:
- name: afp-products-container
image: nexus.mynisum.com/afp-products:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
env:
- name: PORT
value: "8080"
imagePullSecrets:
- name: registry-creds
---
apiVersion: v1
kind: Service
metadata:
name: afp-products-service
spec:
type: LoadBalancer
ports:
- port: 8080
targetPort: 8080
selector:
app: afp-products
\ No newline at end of file
...@@ -37,26 +37,26 @@ public class ProductController { ...@@ -37,26 +37,26 @@ public class ProductController {
} }
@GetMapping("/{sku}") @GetMapping("/{sku}")
public ResponseEntity<Mono<ProductDto>> getProductBySku(@PathVariable String sku) { public ResponseEntity<Mono<Product>> getProductBySku(@PathVariable String sku) {
Mono<ProductDto> monoProd = productService.getProductBySku(sku); Mono<Product> monoProd = productService.getProductBySku(sku);
HttpStatus status = monoProd != null ? HttpStatus.OK : HttpStatus.NOT_FOUND; HttpStatus status = monoProd != null ? HttpStatus.OK : HttpStatus.NOT_FOUND;
return new ResponseEntity<>(monoProd, status); return new ResponseEntity<>(monoProd, status);
} }
@GetMapping() @GetMapping()
public ResponseEntity<Flux<ProductDto>> getAllProducts() { public ResponseEntity<Flux<Product>> getAllProducts() {
return ResponseEntity.ok(productService.findAllProducts()); return ResponseEntity.ok(productService.findAllProducts());
} }
@PutMapping("/{sku}") @PutMapping("/{sku}")
public Mono<ResponseEntity<ProductDto>> updateProduct(@PathVariable String sku, @RequestBody Product product){ public Mono<ResponseEntity<Product>> updateProduct(@PathVariable String sku, @RequestBody Product product){
return productService.updateProductBySku(sku, product) return productService.updateProductBySku(sku, product)
.map(updatedProduct -> ResponseEntity.ok(updatedProduct)) .map(updatedProduct -> ResponseEntity.ok(updatedProduct))
.defaultIfEmpty(ResponseEntity.badRequest().build()); .defaultIfEmpty(ResponseEntity.badRequest().build());
} }
@PostMapping("") @PostMapping("")
public Mono<ProductDto> postProduct(@RequestBody Product product) { public Mono<Product> postProduct(@RequestBody Product product) {
return productService.createProduct(product).onErrorMap(throwable -> new ResourceAlreadyExistsException()); return productService.createProduct(product).onErrorMap(throwable -> new ResourceAlreadyExistsException());
} }
} }
\ No newline at end of file
package com.nisum.ascend.inventory.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
import com.nisum.ascend.inventory.model.Product;
import java.util.ArrayList;
import java.util.List;
@Getter
@AllArgsConstructor
public class ProductDto {
private String sku;
private String upc;
private String productName;
private String productDescription;
private float price;
private String productImageUrl;
private String brand;
private String category;
private int stock;
private List<PromotionDto> promotions;
}
package com.nisum.ascend.inventory.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public class PromotionDto {
private String promotionId;
private String productSku;
private float discountPercentage;
private int minimumQuantity;
public PromotionDto() {}
}
...@@ -20,6 +20,7 @@ public class Product { ...@@ -20,6 +20,7 @@ public class Product {
private float price; private float price;
private int availableStock; private int availableStock;
private int blockedStock; private int blockedStock;
private int fulfilledStock;
private String productImageUrl; private String productImageUrl;
private String brand; private String brand;
private String category; private String category;
...@@ -34,6 +35,7 @@ public class Product { ...@@ -34,6 +35,7 @@ public class Product {
this.price = price; this.price = price;
this.availableStock = availableStock; this.availableStock = availableStock;
this.blockedStock = 0; this.blockedStock = 0;
this.fulfilledStock = 0;
this.productImageUrl = productImageUrl; this.productImageUrl = productImageUrl;
this.brand = brand; this.brand = brand;
this.category = category; this.category = category;
......
package com.nisum.ascend.inventory.service; package com.nisum.ascend.inventory.service;
import com.nisum.ascend.inventory.dto.ProductDto; import com.nisum.ascend.inventory.dto.ProductDto;
import com.nisum.ascend.inventory.dto.PromotionDto;
import com.nisum.ascend.inventory.exception.ResourceNotFoundException; import com.nisum.ascend.inventory.exception.ResourceNotFoundException;
import com.nisum.ascend.inventory.model.Product; import com.nisum.ascend.inventory.model.Product;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -19,35 +18,25 @@ public class ProductService { ...@@ -19,35 +18,25 @@ public class ProductService {
@Autowired @Autowired
ProductRepository productRepository; ProductRepository productRepository;
public ProductDto generateDtoFromProduct(Product product) {
// TODO: Fetch the product's promotion from the Promotions com.nisum.ascend.inventory.service
List<PromotionDto> promotions = new ArrayList<>();
return new ProductDto(product.getSku(), product.getUpc(), product.getProductName(), product.getProductDescription(), product.getPrice(), product.getProductImageUrl(), product.getBrand(), product.getCategory(), product.getAvailableStock(), promotions); public Mono<Product> removeProductBySku(String sku) {
}
public Mono<ProductDto> removeProductBySku(String sku) {
return productRepository return productRepository
.findBySku(sku) .findBySku(sku)
.flatMap(existingProduct -> productRepository.delete(existingProduct) .flatMap(existingProduct -> productRepository.delete(existingProduct)
.then(Mono.just(existingProduct))) .then(Mono.just(existingProduct)))
.map(this::generateDtoFromProduct)
.switchIfEmpty(Mono.error(new ResourceNotFoundException(HttpStatus.NOT_FOUND, "Product Not Found"))); .switchIfEmpty(Mono.error(new ResourceNotFoundException(HttpStatus.NOT_FOUND, "Product Not Found")));
} }
public Mono<ProductDto> getProductBySku(String sku){ public Mono<Product> getProductBySku(String sku){
return productRepository.findBySku(sku) return productRepository.findBySku(sku)
.map(this::generateDtoFromProduct)
.switchIfEmpty(Mono.error(new ResourceNotFoundException(HttpStatus.NOT_FOUND, "product not found"))); .switchIfEmpty(Mono.error(new ResourceNotFoundException(HttpStatus.NOT_FOUND, "product not found")));
} }
public Flux<ProductDto> findAllProducts() { public Flux<Product> findAllProducts() {
return productRepository.findAll() return productRepository.findAll();
.map(this::generateDtoFromProduct);
} }
public Mono<ProductDto> updateProductBySku(String sku, Product product){ public Mono<Product> updateProductBySku(String sku, Product product){
return productRepository.findBySku(sku) return productRepository.findBySku(sku)
.flatMap(dbProduct -> { .flatMap(dbProduct -> {
dbProduct.setUpc(product.getUpc()); dbProduct.setUpc(product.getUpc());
...@@ -59,12 +48,11 @@ public class ProductService { ...@@ -59,12 +48,11 @@ public class ProductService {
dbProduct.setAvailableStock(product.getAvailableStock()); dbProduct.setAvailableStock(product.getAvailableStock());
dbProduct.setProductImageUrl(product.getProductImageUrl()); dbProduct.setProductImageUrl(product.getProductImageUrl());
return productRepository.save(dbProduct); return productRepository.save(dbProduct);
}).map(this::generateDtoFromProduct); });
} }
public Mono<ProductDto> createProduct(Product product) { public Mono<Product> createProduct(Product product) {
return productRepository.save(product) return productRepository.save(product);
.map(this::generateDtoFromProduct);
} }
} }
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