Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
order-management-backend
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
1
Merge Requests
1
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
Ascend
order-management-backend
Commits
5ee47bf5
Commit
5ee47bf5
authored
May 14, 2021
by
Alex Segers
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[AFP-134]
✨
Add paginated & filtered orders endpoint (
@asegers
)
parent
a26b7922
Pipeline
#1750
failed with stage
in 39 seconds
Changes
3
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
123 additions
and
7 deletions
+123
-7
AllOrdersRequestBody.java
.../afp/ordermanagement/controller/AllOrdersRequestBody.java
+62
-0
OrderController.java
...a/com/afp/ordermanagement/controller/OrderController.java
+11
-4
OrderService.java
...in/java/com/afp/ordermanagement/service/OrderService.java
+50
-3
No files found.
src/main/java/com/afp/ordermanagement/controller/AllOrdersRequestBody.java
0 → 100644
View file @
5ee47bf5
package
com
.
afp
.
ordermanagement
.
controller
;
import
com.afp.ordermanagement.model.OrderStatus
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
AllOrdersRequestBody
{
public
Pagination
pagination
;
public
Date
date
;
public
Search
search
;
public
Status
status
;
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
Pagination
{
public
int
page
,
size
;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
Date
{
public
long
start
,
end
;
public
DateFilter
filter
;
}
public
enum
DateFilter
{
orderCreatedAt
,
orderUpdatedAt
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
Search
{
public
SearchBy
by
;
public
String
query
;
}
public
enum
SearchBy
{
id
,
customerEmailAddress
,
orderTrackingCode
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
Status
{
public
boolean
received
,
fulfilled
,
cancelled
;
public
List
<
OrderStatus
>
getTruthyStatuses
()
{
List
<
OrderStatus
>
truthyStatuses
=
new
ArrayList
<>();
if
(
received
)
truthyStatuses
.
add
(
OrderStatus
.
RECEIVED
);
if
(
fulfilled
)
truthyStatuses
.
add
(
OrderStatus
.
FULFILLED
);
if
(
cancelled
)
truthyStatuses
.
add
(
OrderStatus
.
CANCELLED
);
return
truthyStatuses
;
}
}
}
\ No newline at end of file
src/main/java/com/afp/ordermanagement/controller/OrderController.java
View file @
5ee47bf5
...
...
@@ -4,6 +4,9 @@ import com.afp.ordermanagement.model.Order;
import
com.afp.ordermanagement.reactivekafkaservice.Receiver
;
import
com.afp.ordermanagement.reactivekafkaservice.Sender
;
import
com.afp.ordermanagement.service.OrderService
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.ResponseEntity
;
...
...
@@ -11,6 +14,8 @@ import org.springframework.web.bind.annotation.*;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Mono
;
import
static
java
.
util
.
Objects
.
isNull
;
@RestController
@RequestMapping
(
"/api"
)
@CrossOrigin
...
...
@@ -40,13 +45,17 @@ public class OrderController {
return
orderService
.
createOrder
(
orderObject
);
}
@GetMapping
(
"/orders"
)
@CrossOrigin
public
Flux
<
Order
>
getAllOrders
(){
public
Flux
<
Order
>
getAllOrders
()
{
return
orderService
.
getAllOrders
();
}
@PostMapping
(
"/orders/filtered"
)
@CrossOrigin
public
Flux
<
Order
>
getFilteredOrders
(
@RequestBody
AllOrdersRequestBody
reqBody
)
{
return
orderService
.
getQueriedOrders
(
reqBody
);
}
@GetMapping
(
"/orders/{orderId}"
)
@CrossOrigin
...
...
@@ -70,6 +79,4 @@ public class OrderController {
public
void
deleteOrderbyId
(
@PathVariable
(
value
=
"orderId"
)
String
orderId
)
{
orderService
.
deleteOrderById
(
orderId
);
}
}
src/main/java/com/afp/ordermanagement/service/OrderService.java
View file @
5ee47bf5
package
com
.
afp
.
ordermanagement
.
service
;
import
com.afp.ordermanagement.
model.Item
;
import
com.afp.ordermanagement.
controller.AllOrdersRequestBody
;
import
com.afp.ordermanagement.model.Order
;
import
com.afp.ordermanagement.model.OrderStatus
;
import
com.afp.ordermanagement.repository.OrderRepository
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.PageRequest
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.domain.Sort
;
import
org.springframework.data.mongodb.core.ReactiveMongoTemplate
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.stereotype.Service
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Mono
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.stream.Collectors
;
import
static
java
.
util
.
Objects
.
isNull
;
@Service
public
class
OrderService
{
...
...
@@ -19,6 +26,9 @@ public class OrderService {
@Autowired
OrderRepository
orderRepository
;
@Autowired
ReactiveMongoTemplate
reactiveMongoTemplate
;
public
Mono
<
Order
>
createOrder
(
Order
newOrder
){
System
.
out
.
println
(
"here"
);
String
defaultOrderTrackingCode
=
"N/A"
;
...
...
@@ -36,6 +46,43 @@ public class OrderService {
return
orderRepository
.
findAll
();
}
public
Flux
<
Order
>
getQueriedOrders
(
AllOrdersRequestBody
requestBody
){
Query
query
=
new
Query
();
// ---- pagination & sort ----
int
page
=
requestBody
.
pagination
.
page
,
size
=
requestBody
.
pagination
.
size
;
Sort
sortByLastUpdated
=
Sort
.
by
(
"orderUpdatedAt"
).
descending
();
Pageable
pagination
=
PageRequest
.
of
(
page
,
size
,
sortByLastUpdated
);
query
.
with
(
pagination
);
// ---- date ----
long
startDate
=
requestBody
.
date
.
start
,
endDate
=
requestBody
.
date
.
end
;
AllOrdersRequestBody
.
DateFilter
dateFilter
=
requestBody
.
date
.
filter
;
if
(
startDate
>
0
&&
endDate
>
0
&&
startDate
<=
endDate
)
{
if
(!
isNull
(
dateFilter
))
{
query
.
addCriteria
(
Criteria
.
where
(
dateFilter
.
toString
()).
gte
(
startDate
).
lte
(
endDate
));
}
else
{
Criteria
dateCriteria
=
Criteria
.
where
(
"orderCreatedAt"
).
gte
(
startDate
).
lte
(
endDate
)
.
orOperator
(
Criteria
.
where
(
"orderUpdatedAt"
).
gte
(
startDate
).
lte
(
endDate
));
query
.
addCriteria
(
dateCriteria
);
}
}
// ---- search ----
String
queryText
=
requestBody
.
search
.
query
;
if
(!
isNull
(
queryText
)
&&
!
queryText
.
trim
().
isEmpty
())
{
String
searchByStr
=
requestBody
.
search
.
by
.
toString
();
Criteria
searchCriteria
=
Criteria
.
where
(
searchByStr
).
regex
(
"^"
+
queryText
);
query
.
addCriteria
(
searchCriteria
);
}
// ---- status ----
List
<
OrderStatus
>
truthyStatuses
=
requestBody
.
status
.
getTruthyStatuses
();
if
(!
truthyStatuses
.
isEmpty
())
{
Criteria
statusCriteria
=
Criteria
.
where
(
"orderStatus"
).
in
(
truthyStatuses
);
query
.
addCriteria
(
statusCriteria
);
}
return
reactiveMongoTemplate
.
find
(
query
,
Order
.
class
);
}
public
Mono
<
Order
>
getOrderById
(
String
orderId
)
{
return
orderRepository
.
findById
(
orderId
);
}
...
...
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