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