Commit 57d6fe7f authored by Christopher Cottier's avatar Christopher Cottier

refactored server to just use Product model, working put route, editing delete route

parent 818cea16
package com.nisum.webfluxday2;
import com.nisum.webfluxday2.model.ProductResponse;
import com.nisum.webfluxday2.model.Product;
import org.reactivestreams.Subscriber;
import org.reactivestreams.Subscription;
public class ProductSubscriber implements Subscriber<ProductResponse> {
public class ProductSubscriber implements Subscriber<Product> {
@Override
public void onSubscribe(Subscription subscription) {
System.out.println("subscribed");
......@@ -11,8 +11,8 @@ public class ProductSubscriber implements Subscriber<ProductResponse> {
}
@Override
public void onNext(ProductResponse productResponse) {
System.out.println(productResponse.getId());
public void onNext(Product Product) {
System.out.println(Product.getId());
}
......
package com.nisum.webfluxday2;
import com.nisum.webfluxday2.model.ProductResponse;
import com.nisum.webfluxday2.model.Product;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
public class WebClientTest {
public static void main(String[] args) {
WebClient webClient = WebClient.create("http://localhost:8080/products/608347c698dbca1113ceb613");
Mono<ProductResponse> mono = webClient.get().retrieve().bodyToMono(ProductResponse.class);
mono.subscribe(new ProductSubscriber());
Mono<Product> mono = webClient.get().retrieve().bodyToMono(Product.class);
}
}
package com.nisum.webfluxday2.controller;
import com.nisum.webfluxday2.model.ProductRequest;
import com.nisum.webfluxday2.model.ProductResponse;
import com.nisum.webfluxday2.repository.model.Product;
import com.nisum.webfluxday2.model.Product;
import com.nisum.webfluxday2.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
......@@ -18,28 +17,33 @@ public class ProductController {
ProductService productService;
@GetMapping("/products")
public Flux<ProductResponse> getAllProducts(){
@ResponseStatus(HttpStatus.OK)
public Flux<Product> getAllProducts(){
return productService.getAll();
}
@GetMapping("/products/{id}")
public Mono<ProductResponse> findProduct(@PathVariable String id){
@ResponseStatus(HttpStatus.OK)
public Mono<Product> findProduct(@PathVariable String id){
return productService.findProduct(id);
}
@PostMapping("/products")
public Mono<ProductResponse> addNewProduct(@RequestBody ProductRequest productRequest){
return productService.addProduct(productRequest);
@ResponseStatus(HttpStatus.OK)
public Mono<Product> addNewProduct(@RequestBody Product product){
return productService.addProduct(product);
}
@PutMapping("/products/{id}")
public Mono<ProductResponse> alterProduct(@PathVariable String id, @RequestBody ProductRequest productRequest){
return productService.alterProduct(id, productRequest);
@ResponseStatus(HttpStatus.OK)
public Mono<Product> alterProduct(@PathVariable String id, @RequestBody Product product){
return productService.alterProduct(id, product);
}
@DeleteMapping("/products/{id}")
public Mono<Void> deleteProduct(@PathVariable String id){
return productService.deleteProduct(id);
@ResponseStatus(HttpStatus.OK)
public void deleteProduct(@PathVariable String id){
productService.deleteProduct(id);
}
......
package com.nisum.webfluxday2.repository.model;
package com.nisum.webfluxday2.model;
import com.nisum.webfluxday2.model.ProductRequest;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
......@@ -13,14 +12,20 @@ public class Product {
String description;
Double price;
public Product(ProductRequest productRequest) {
this.name = productRequest.getName();
this.description = productRequest.getDescription();
this.price = productRequest.getPrice();
public Product(Product product) {
this.name = product.getName();
this.description = product.getDescription();
this.price = product.getPrice();
}
public Product(){}
public void updateProduct(Product Product){
setName(Product.getName());
setDescription(Product.getDescription());
setPrice(Product.getPrice());
}
public String getId() {
return id;
}
......
package com.nisum.webfluxday2.model;
public class ProductRequest {
String name;
String description;
Double price;
public ProductRequest(String name, String description, Double price) {
this.name = name;
this.description = description;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
}
package com.nisum.webfluxday2.model;
import com.nisum.webfluxday2.repository.model.Product;
public class ProductResponse {
String id;
String name;
String description;
Double price;
public ProductResponse(Product product) {
this.id = product.getId();
this.name = product.getName();
this.description = product.getDescription();
this.price = product.getPrice();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
}
package com.nisum.webfluxday2.repository;
import com.nisum.webfluxday2.repository.model.Product;
import com.nisum.webfluxday2.model.Product;
import org.springframework.data.mongodb.repository.ReactiveMongoRepository;
import org.springframework.stereotype.Repository;
......
package com.nisum.webfluxday2.service;
import com.nisum.webfluxday2.model.ProductRequest;
import com.nisum.webfluxday2.model.ProductResponse;
import com.nisum.webfluxday2.repository.ProductRepository;
import com.nisum.webfluxday2.repository.model.Product;
import com.nisum.webfluxday2.model.Product;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;
......@@ -15,44 +13,33 @@ public class ProductService {
@Autowired
ProductRepository productRepository;
public Flux<ProductResponse> getAll() {
Flux<Product> allProducts = productRepository.findAll();
System.out.println(allProducts);
return allProducts.map(product -> new ProductResponse(product));
public Flux<Product> getAll() {
return productRepository.findAll();
}
public Mono<ProductResponse> addProduct(ProductRequest productRequest) {
Mono<Product> newProduct = productRepository.insert(new Product(productRequest));
return newProduct.map(product -> new ProductResponse(product));
public Mono<Product> addProduct(Product product) {
return productRepository.insert(new Product(product));
}
public Mono<ProductResponse> findProduct(String id) {
Mono<Product> product = productRepository.findById(id);
return product.map(prod -> new ProductResponse(prod));
public Mono<Product> findProduct(String id) {
return productRepository.findById(id);
}
public Mono<ProductResponse> alterProduct(String id, ProductRequest productRequest) {
public Mono<Product> alterProduct(String id, Product product) {
System.out.println("put service");
Mono<Product> product = productRepository.findById(id);
return product.flatMap(prod -> {
prod.setDescription(productRequest.getDescription());
prod.setPrice(productRequest.getPrice());
prod.setName(productRequest.getName());
System.out.println("in put map");
return productRepository.save(prod);
}).map(prod -> new ProductResponse(prod));
// Mono<Product> updatedProduct = productRepository.findById(id)
// .map(prod -> prod.updateProduct(product))
// .;
return productRepository.save(product);
}
public Mono<Void> deleteProduct(String id) {
return productRepository.findById(id)
.map(product -> productRepository.delete(product))
.then();
public void deleteProduct(String id) {
Mono<Product> productToDelete = productRepository.findById(id);
productRepository.deleteById(id);
}
}
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