Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
W
warehouse-management
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
warehouse-management
Commits
97f2eeda
Commit
97f2eeda
authored
May 05, 2021
by
Philippe Fonzin
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' into kafka
parents
6b1668b0
dcb3abf1
Changes
17
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
20168 additions
and
84 deletions
+20168
-84
.gitignore
.gitignore
+2
-1
README.md
README.md
+3
-0
package-lock.json
frontend/package-lock.json
+19884
-24
package.json
frontend/package.json
+1
-0
App.jsx
frontend/src/App.jsx
+7
-3
order_actions.js
frontend/src/actions/order_actions.js
+5
-4
OrderButtons.jsx
frontend/src/components/order/OrderButtons.jsx
+37
-0
OrderIndex.jsx
frontend/src/components/order/OrderIndex.jsx
+7
-8
OrderIndexItem.jsx
frontend/src/components/order/OrderIndexItem.jsx
+18
-1
Login.jsx
frontend/src/components/session/Login.jsx
+27
-0
Logout.jsx
frontend/src/components/session/Logout.jsx
+25
-0
orders_reducer.js
frontend/src/reducers/entities/orders_reducer.js
+11
-3
orders_api_util.jsx
frontend/src/util/orders_api_util.jsx
+73
-37
pom.xml
pom.xml
+11
-1
WarehouseController.java
...nalproject/warehouse/controllers/WarehouseController.java
+14
-0
OrderResponse.java
...om/ascendfinalproject/warehouse/models/OrderResponse.java
+20
-0
WarehouseOrderService.java
...inalproject/warehouse/services/WarehouseOrderService.java
+23
-2
No files found.
.gitignore
View file @
97f2eeda
...
...
@@ -33,3 +33,4 @@ build/
.vscode/
/frontend/node_modules/
/frontend/src/config/
\ No newline at end of file
README.md
View file @
97f2eeda
...
...
@@ -38,3 +38,6 @@
-
Order status update screen mark orders as fulfilled or cancelled
-
Order search
-
Order information page
#### API Documentation
https://documenter.getpostman.com/view/7402212/TzRNGATe
frontend/package-lock.json
View file @
97f2eeda
This diff is collapsed.
Click to expand it.
frontend/package.json
View file @
97f2eeda
...
...
@@ -9,6 +9,7 @@
"axios"
:
"^0.21.1"
,
"react"
:
"^17.0.2"
,
"react-dom"
:
"^17.0.2"
,
"react-google-login"
:
"^5.2.2"
,
"react-icons"
:
"^4.2.0"
,
"react-redux"
:
"^7.2.4"
,
"react-scripts"
:
"4.0.3"
,
...
...
frontend/src/App.jsx
View file @
97f2eeda
import
Login
from
"./components/session/Login"
;
import
Logout
from
"./components/session/Logout"
;
import
Header
from
"./components/header/Header"
;
import
Footer
from
"./components/footer/Footer"
;
import
OrderIndex
from
"./components/order/OrderIndex"
...
...
@@ -5,6 +7,8 @@ import OrderIndex from "./components/order/OrderIndex"
const
App
=
()
=>
{
return
(
<
div
className=
"app"
>
<
Login
/>
<
Logout
/>
<
Header
/>
<
OrderIndex
/>
<
Footer
/>
...
...
frontend/src/actions/order_actions.js
View file @
97f2eeda
...
...
@@ -4,9 +4,9 @@ export const RECEIVE_ORDERS = 'RECEIVE_ORDERS';
export
const
RECEIVE_ORDER
=
'RECEIVE_ORDER'
;
export
const
UPDATE_ORDER
=
'UPDATE_ORDER'
;
const
receiveOrders
=
(
payload
)
=>
({
const
receiveOrders
=
(
orders
)
=>
({
type
:
RECEIVE_ORDERS
,
payload
,
orders
,
})
const
receiveOrder
=
(
order
)
=>
({
...
...
@@ -32,8 +32,9 @@ export const createOrder = (order) => (dispatch) =>
dispatch
(
receiveOrder
(
res
))
});
export
const
editOrder
=
(
order
)
=>
(
dispatch
)
=>
export
const
editOrder
=
(
order
)
=>
(
dispatch
)
=>
{
OrderAPIUtil
.
editOrder
(
order
)
.
then
(
res
=>
{
dispatch
(
updateOrder
(
res
))
});
}
\ No newline at end of file
frontend/src/components/order/OrderButtons.jsx
0 → 100644
View file @
97f2eeda
import
React
from
"react"
;
import
{
connect
}
from
"react-redux"
;
import
{
editOrder
}
from
"../../actions/order_actions"
;
const
OrderButtons
=
({
order
,
editOrder
})
=>
{
// const { id, orderId, status, orderItems, createdAt, modifiedAt } = order;
const
handleUpdate
=
(
action
)
=>
{
console
.
log
(
action
);
if
(
action
===
"FULFILL"
)
{
editOrder
({
...
order
,
status
:
"FULFILLED"
})
}
else
if
(
action
===
"CANCEL"
)
{
editOrder
({
...
order
,
status
:
"CANCELLED"
});
}
}
const
fulfill
=
(
<
button
onClick=
{
()
=>
handleUpdate
(
"FULFILL"
)
}
>
Fulfill
</
button
>
)
const
cancel
=
(
<
button
onClick=
{
()
=>
handleUpdate
(
"CANCEL"
)
}
>
Cancel
</
button
>
)
return
(
<
div
>
{
fulfill
}
{
cancel
}
</
div
>
);
};
const
mapStateToProps
=
(
state
)
=>
({});
const
mapDispatchToProps
=
(
dispatch
)
=>
({
editOrder
:
(
order
)
=>
dispatch
(
editOrder
(
order
)),
});
export
default
connect
(
mapStateToProps
,
mapDispatchToProps
)(
OrderButtons
);
frontend/src/components/order/OrderIndex.jsx
View file @
97f2eeda
...
...
@@ -23,17 +23,16 @@ const OrderIndex = ({
<
h1
>
Order Index
</
h1
>
<
button
onClick=
{
createOrder
}
>
Create New Order
</
button
>
<
button
onClick=
{
editOrder
}
>
Update Order
</
button
>
{
orders
.
allIds
.
map
(
orderId
=>
{
<
br
/>
<
br
/>
{
orders
.
allIds
.
map
((
orderId
)
=>
{
const
order
=
orders
.
byId
[
orderId
];
return
(
<
OrderIndexItem
key=
{
order
.
id
}
order=
{
order
}
/>
)
return
<
OrderIndexItem
key=
{
order
.
id
}
order=
{
order
}
/>;
})
}
</
div
>
)
)
;
}
...
...
frontend/src/components/order/OrderIndexItem.jsx
View file @
97f2eeda
import
React
from
'react'
;
import
OrderButtons
from
'./OrderButtons'
;
const
OrderIndexItem
=
({
order
})
=>
{
const
{
id
,
orderId
,
status
,
orderItems
,
createdAt
,
modifiedAt
}
=
order
;
const
actions
=
(
status
===
"RECEIVED"
?
<
OrderButtons
order=
{
order
}
/>
:
<
div
>
{
status
}
</
div
>)
return
(
<
div
>
{
order
.
orderId
}
{
order
.
status
}
<
div
>
{
`Order #: ${orderId}`
}
</
div
>
{
actions
}
</
div
>
)
};
...
...
frontend/src/components/session/Login.jsx
0 → 100644
View file @
97f2eeda
import
React
from
'react'
;
import
{
GoogleLogin
}
from
"react-google-login"
;
import
keys
from
'../../config/keys_dev'
const
clientId
=
keys
.
clientId
;
const
Login
=
()
=>
{
const
responseGoogle
=
(
response
)
=>
{
console
.
log
(
response
);
};
return
(
<
div
>
<
GoogleLogin
clientId=
{
clientId
}
buttonText=
"Login with Google"
onSuccess=
{
responseGoogle
}
onFailure=
{
responseGoogle
}
cookiePolicy=
{
"single_host_origin"
}
// isSignedIn={true}
/>
</
div
>
);
}
export
default
Login
;
\ No newline at end of file
frontend/src/components/session/Logout.jsx
0 → 100644
View file @
97f2eeda
import
React
from
"react"
;
import
{
GoogleLogout
}
from
"react-google-login"
;
import
keys
from
"../../config/keys_dev"
;
const
clientId
=
keys
.
clientId
;
const
Logout
=
()
=>
{
const
responseGoogle
=
(
response
)
=>
{
console
.
log
(
response
);
};
return
(
<
div
>
<
GoogleLogout
clientId=
{
clientId
}
buttonText=
"Logout"
onLogoutSuccess=
{
responseGoogle
}
isSignedIn=
{
true
}
/>
</
div
>
);
};
export
default
Logout
;
frontend/src/reducers/entities/orders_reducer.js
View file @
97f2eeda
...
...
@@ -16,10 +16,18 @@ const OrdersReducer = (oldState = initialState, action) => {
switch
(
action
.
type
)
{
case
RECEIVE_ORDERS
:
return
action
.
payload
;
const
orderState
=
{
byId
:
{},
allIds
:
[],
};
Object
.
keys
(
action
.
orders
).
forEach
(
wareId
=>
{
orderState
.
allIds
.
push
(
wareId
);
orderState
.
byId
[
wareId
]
=
action
.
orders
[
wareId
];
})
return
orderState
;
case
RECEIVE_ORDER
:
newState
.
byId
[
order
.
id
]
=
order
;
newState
.
allIds
.
unshift
(
order
.
id
);
newState
.
allIds
.
push
(
order
.
id
);
return
newState
;
case
UPDATE_ORDER
:
newState
.
byId
[
order
.
id
]
=
order
;
...
...
frontend/src/util/orders_api_util.jsx
View file @
97f2eeda
// import axios from 'axios';
const
RECEIVED
=
"RECEIVED"
;
// const FULFILLED = "FULFILLED";
// const CANCELLED = "CANCELLED";
const
sampleGetAll
=
{
allIds
:
[
"1"
,
"2"
,
"3"
],
byId
:
{
"1"
:
{
//
allIds: ["1", "2", "3"],
//
byId: {
1
:
{
id
:
"1"
,
orderId
:
"o1"
,
status
:
"unfulfilled"
,
status
:
RECEIVED
,
orderItems
:
[
{
itemId
:
"17"
,
itemName
:
"Item 1"
,
itemQuantity
:
4
,
itemPrice
:
17.99
,
itemSku
:
8765309
,
},
{
itemId
:
"18"
,
itemName
:
"Item 2"
,
itemQuantity
:
42
,
itemPrice
:
17.99
,
itemSku
:
8715309
,
},
"2"
:
{
],
},
2
:
{
id
:
"2"
,
orderId
:
"o2"
,
status
:
"unfulfilled"
,
status
:
RECEIVED
,
orderItems
:
[
{
itemId
:
"17"
,
itemName
:
"Item 1"
,
itemQuantity
:
3
,
itemPrice
:
17.99
,
itemSku
:
8765309
,
},
{
itemId
:
"18"
,
itemName
:
"Item 2"
,
itemQuantity
:
41
,
itemPrice
:
17.99
,
itemSku
:
8715309
,
},
"3"
:
{
],
},
3
:
{
id
:
"3"
,
orderId
:
"o3"
,
status
:
"unfulfilled"
,
status
:
RECEIVED
,
orderItems
:
[
{
itemId
:
"17"
,
itemName
:
"Item 1"
,
itemQuantity
:
2
,
itemPrice
:
17.99
,
itemSku
:
8765309
,
},
{
itemId
:
"18"
,
itemName
:
"Item 2"
,
itemQuantity
:
40
,
itemPrice
:
17.99
,
itemSku
:
8715309
,
},
],
},
// },
};
const
sampleNew
=
{
id
:
"4"
,
orderId
:
"o4"
,
status
:
"unfulfilled"
,
};
const
sampleUpdateFul
=
{
id
:
"3"
,
orderId
:
"o3"
,
status
:
"fulfilled"
,
};
const
sampleUpdateCan
=
{
id
:
"2"
,
orderId
:
"o2"
,
status
:
"cancelled"
,
status
:
RECEIVED
,
};
const
getAllPromise
=
new
Promise
(
(
resolve
,
reject
)
=>
{
...
...
@@ -45,12 +85,6 @@ const getAllPromise = new Promise( (resolve, reject) => {
const
createNewPromise
=
new
Promise
(
(
resolve
,
reject
)
=>
{
resolve
(
sampleNew
)
})
const
updateFulfillPromise
=
new
Promise
(
(
resolve
,
reject
)
=>
{
resolve
(
sampleUpdateFul
)
})
const
updateCancelPromise
=
new
Promise
(
(
resolve
,
reject
)
=>
{
resolve
(
sampleUpdateCan
)
})
export
const
getOrders
=
()
=>
{
return
getAllPromise
;
...
...
@@ -61,7 +95,9 @@ export const createOrder = (order) => {
}
export
const
editOrder
=
(
order
)
=>
{
return
updateFulfillPromise
;
return
new
Promise
(
(
resolve
,
reject
)
=>
{
resolve
(
order
);
})
}
// export const getOrders =() => {
...
...
pom.xml
View file @
97f2eeda
...
...
@@ -63,7 +63,17 @@
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
org.mongodb
</groupId>
<artifactId>
mongodb-driver-sync
</artifactId>
<version>
4.0.5
</version>
</dependency>
<dependency>
<groupId>
org.mongodb
</groupId>
<artifactId>
mongodb-driver-sync
</artifactId>
<version>
4.0.5
</version>
</dependency>
<dependency>
<groupId>
org.apache.httpcomponents
</groupId>
<artifactId>
httpclient
</artifactId>
<scope>
test
</scope>
</dependency>
</dependencies>
<build>
...
...
src/main/java/com/ascendfinalproject/warehouse/controllers/WarehouseController.java
View file @
97f2eeda
...
...
@@ -14,14 +14,28 @@ public class WarehouseController {
@Autowired
WarehouseOrderService
orderService
;
@CrossOrigin
@GetMapping
(
value
=
"/orders"
)
public
Flux
<
WarehouseOrder
>
getOrders
()
{
return
orderService
.
getOrders
();
}
@CrossOrigin
@GetMapping
(
"/orders/{id}"
)
public
Mono
<
WarehouseOrder
>
findStudent
(
@PathVariable
String
id
){
return
orderService
.
findOrderById
(
id
);
}
@CrossOrigin
@PostMapping
(
value
=
"/orders"
)
public
Mono
<
WarehouseOrder
>
createOrder
(
@RequestBody
WarehouseOrder
order
)
{
return
orderService
.
createOrder
(
order
);
}
@CrossOrigin
@PutMapping
(
value
=
"/orders/{id}"
)
public
Mono
<
WarehouseOrder
>
updateOrder
(
@RequestBody
WarehouseOrder
order
,
@PathVariable
(
value
=
"id"
)
String
id
)
{
return
orderService
.
updateOrder
(
order
,
id
);
}
}
src/main/java/com/ascendfinalproject/warehouse/models/OrderResponse.java
0 → 100644
View file @
97f2eeda
package
com
.
ascendfinalproject
.
warehouse
.
models
;
import
lombok.Getter
;
import
lombok.Setter
;
import
java.util.HashMap
;
import
java.util.List
;
@Getter
@Setter
public
class
OrderResponse
{
private
List
<
String
>
allIds
;
private
HashMap
<
String
,
WarehouseOrder
>
byId
;
public
void
appendId
(
String
id
)
{
allIds
.
add
(
id
);
}
}
src/main/java/com/ascendfinalproject/warehouse/services/WarehouseOrderService.java
View file @
97f2eeda
...
...
@@ -3,7 +3,6 @@ package com.ascendfinalproject.warehouse.services;
import
com.ascendfinalproject.warehouse.models.WarehouseOrder
;
import
com.ascendfinalproject.warehouse.repositories.WarehouseOrderRepository
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.mongodb.repository.ReactiveMongoRepository
;
import
org.springframework.stereotype.Service
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Mono
;
...
...
@@ -14,12 +13,34 @@ public class WarehouseOrderService {
@Autowired
WarehouseOrderRepository
orderRepository
;
public
Mono
<
WarehouseOrder
>
findOrderById
(
String
id
)
{
return
orderRepository
.
findById
(
id
);
}
public
Flux
<
WarehouseOrder
>
getOrders
()
{
return
orderRepository
.
findAll
();
// OrderResponse response = new OrderResponse();
// orderRepository.findAll()
// .flatMap(order -> {
// response.appendId(order.getId());
// response.getById().put(order.getId(), order);
// });
//
// return response;
}
public
Mono
<
WarehouseOrder
>
createOrder
(
WarehouseOrder
order
)
{
return
orderRepository
.
save
(
order
);
}
public
Mono
<
WarehouseOrder
>
updateOrder
(
WarehouseOrder
order
,
String
id
)
{
return
orderRepository
.
findById
(
id
)
.
flatMap
(
existingOrder
->
{
existingOrder
.
setOrderId
(
order
.
getOrderId
());
existingOrder
.
setStatus
(
order
.
getStatus
());
return
orderRepository
.
save
(
existingOrder
);
});
}
}
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