Commit 6cbe12e3 authored by Ashok Kumar K's avatar Ashok Kumar K

added getAllProducts and changed 'as' operator to 'flatMap'

parent c53896a7
......@@ -40,29 +40,34 @@ public class ProductHandler {
.path("/product", () -> route()
.GET(SKU_TEXT_PATH_VAR,
req -> productService.getProductBySku(req.pathVariable(SKU_TEXT))
.as(productMono -> ok()
.body(productMono, Product.class))
.flatMap(product -> ok()
.bodyValue(product))
)
.POST("",
req -> req.bodyToMono(Product.class)
.doOnNext(this::validateProduct)
.flatMap(productService::saveProduct)
.as(productMono -> created(req.uri())
.body(productMono, Product.class))
.flatMap(product -> created(req.uri())
.bodyValue(product))
)
.PUT(SKU_TEXT_PATH_VAR,
req -> req.bodyToMono(Product.class)
.doOnNext(this::validateProduct)
.flatMap(product -> productService.updateProduct(req.pathVariable(SKU_TEXT), product))
.as(productMono -> accepted()
.body(productMono, Product.class))
.flatMap(product -> accepted()
.bodyValue(product))
)
.DELETE(SKU_TEXT_PATH_VAR,
req -> productService.removeProduct(req.pathVariable(SKU_TEXT))
.as(res -> ok().body(res, String.class))
.flatMap(res -> ok().bodyValue(res))
)
.build())
.path("/products", () -> route()
.GET("",
req -> ok()
.body(productService.getAllProducts(), Product.class)
).build())
.build();
}
......
package com.nisum.reactiveweb.repository;
import com.nisum.reactiveweb.model.Product;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
public interface ProductRepository {
Mono<Product> getProductBySku(String id);
Flux<Product> getAllProducts();
Mono<Product> saveProduct(Product product);
Mono<Product> updateProduct(String sku, Product product);
......
......@@ -3,6 +3,7 @@ package com.nisum.reactiveweb.repository;
import com.mongodb.client.result.DeleteResult;
import com.nisum.reactiveweb.model.Product;
import lombok.AllArgsConstructor;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import org.springframework.data.mongodb.core.FindAndModifyOptions;
......@@ -23,6 +24,11 @@ public class ProductRepositoryImpl implements ProductRepository {
return template.findById(sku, Product.class);
}
@Override
public Flux<Product> getAllProducts() {
return template.findAll(Product.class);
}
@Override
public Mono<Product> saveProduct(Product product) {
return template.save(product);
......
package com.nisum.reactiveweb.service;
import com.nisum.reactiveweb.model.Product;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import org.springframework.stereotype.Service;
......@@ -9,6 +10,8 @@ import org.springframework.stereotype.Service;
public interface ProductService {
Mono<Product> getProductBySku(String sku);
Flux<Product> getAllProducts();
Mono<Product> saveProduct(Product product);
Mono<Product> updateProduct(String sku, Product product);
......
......@@ -5,6 +5,7 @@ import com.nisum.reactiveweb.model.Product;
import com.nisum.reactiveweb.repository.ProductRepository;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import org.springframework.stereotype.Service;
......@@ -21,6 +22,11 @@ public class ProductServiceImpl implements ProductService {
.switchIfEmpty(Mono.error(new ProductNotFoundException()));
}
@Override
public Flux<Product> getAllProducts() {
return repository.getAllProducts();
}
@Override
public Mono<Product> saveProduct(Product productToSave) {
return Mono.just(productToSave)
......
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