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