Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
W
webflux-springboot-CRUD-app
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Christopher Cottier
webflux-springboot-CRUD-app
Commits
57d6fe7f
Commit
57d6fe7f
authored
Apr 29, 2021
by
Christopher Cottier
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactored server to just use Product model, working put route, editing delete route
parent
818cea16
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
49 additions
and
141 deletions
+49
-141
ProductSubscriber.java
src/main/java/com/nisum/webfluxday2/ProductSubscriber.java
+4
-4
WebClientTest.java
src/main/java/com/nisum/webfluxday2/WebClientTest.java
+2
-3
ProductController.java
...a/com/nisum/webfluxday2/controller/ProductController.java
+15
-11
Product.java
src/main/java/com/nisum/webfluxday2/model/Product.java
+11
-6
ProductRequest.java
...main/java/com/nisum/webfluxday2/model/ProductRequest.java
+0
-38
ProductResponse.java
...ain/java/com/nisum/webfluxday2/model/ProductResponse.java
+0
-49
ProductRepository.java
...a/com/nisum/webfluxday2/repository/ProductRepository.java
+1
-1
ProductService.java
...in/java/com/nisum/webfluxday2/service/ProductService.java
+16
-29
No files found.
src/main/java/com/nisum/webfluxday2/ProductSubscriber.java
View file @
57d6fe7f
package
com
.
nisum
.
webfluxday2
;
import
com.nisum.webfluxday2.model.Product
Response
;
import
com.nisum.webfluxday2.model.Product
;
import
org.reactivestreams.Subscriber
;
import
org.reactivestreams.Subscription
;
public
class
ProductSubscriber
implements
Subscriber
<
Product
Response
>
{
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
(
Product
Response
productResponse
)
{
System
.
out
.
println
(
productResponse
.
getId
());
public
void
onNext
(
Product
Product
)
{
System
.
out
.
println
(
Product
.
getId
());
}
...
...
src/main/java/com/nisum/webfluxday2/WebClientTest.java
View file @
57d6fe7f
package
com
.
nisum
.
webfluxday2
;
import
com.nisum.webfluxday2.model.Product
Response
;
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
);
}
}
src/main/java/com/nisum/webfluxday2/controller/ProductController.java
View file @
57d6fe7f
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
);
}
...
...
src/main/java/com/nisum/webfluxday2/
repository/
model/Product.java
→
src/main/java/com/nisum/webfluxday2/model/Product.java
View file @
57d6fe7f
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
(
Product
Request
productReques
t
)
{
this
.
name
=
product
Request
.
getName
();
this
.
description
=
product
Request
.
getDescription
();
this
.
price
=
product
Request
.
getPrice
();
public
Product
(
Product
produc
t
)
{
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
;
}
...
...
src/main/java/com/nisum/webfluxday2/model/ProductRequest.java
deleted
100644 → 0
View file @
818cea16
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
;
}
}
src/main/java/com/nisum/webfluxday2/model/ProductResponse.java
deleted
100644 → 0
View file @
818cea16
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
;
}
}
src/main/java/com/nisum/webfluxday2/repository/ProductRepository.java
View file @
57d6fe7f
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
;
...
...
src/main/java/com/nisum/webfluxday2/service/ProductService.java
View file @
57d6fe7f
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
<
Product
Response
>
addProduct
(
ProductRequest
productReques
t
)
{
Mono
<
Product
>
newProduct
=
productRepository
.
insert
(
new
Product
(
productRequest
));
return
newProduct
.
map
(
product
->
new
ProductResponse
(
product
));
public
Mono
<
Product
>
addProduct
(
Product
produc
t
)
{
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
<
Product
Response
>
alterProduct
(
String
id
,
ProductRequest
productReques
t
)
{
public
Mono
<
Product
>
alterProduct
(
String
id
,
Product
produc
t
)
{
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
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment