Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Order process documentation #1075

Open
wants to merge 123 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 34 commits
Commits
Show all changes
123 commits
Select commit Hold shift + click to select a range
81c3ff6
Structure docs folder
hnd14 Sep 11, 2024
3414b42
First draft for readme
hnd14 Sep 11, 2024
faeb8dd
Rename NextJs to Storefront in diagrams
hnd14 Sep 11, 2024
bb2d853
Delete unused image
hnd14 Sep 11, 2024
d4de77b
Small change in sequence diagrams
hnd14 Sep 13, 2024
b86f0e6
Add stock keeping and cart deleting steps
hnd14 Sep 13, 2024
359622e
Fix: fix to correct api endpoints
hnd14 Sep 13, 2024
71ab961
Feat: add Order state diagrams
hnd14 Sep 13, 2024
3d7ccf4
Feat: Add state diagram to README
hnd14 Sep 13, 2024
2890581
Fix: small fix for order state diagram
hnd14 Sep 13, 2024
c2252df
Fix: rename status to reflect the correct name in the code
hnd14 Sep 13, 2024
25e0519
Add numbering for order flow
hnd14 Sep 13, 2024
e40db98
Feat: Add numbering for create checkout diagram
hnd14 Sep 13, 2024
7d828fa
Feat: add Checkout states diagram
hnd14 Sep 13, 2024
7bf34a3
Feat: update README file
hnd14 Sep 13, 2024
25ad3bc
#1008 order process: checkout flow
nashtech-vietvuhoang1 Sep 17, 2024
37d5776
Update checkout sequence diagram (#1046)
hnd14 Sep 17, 2024
4b9b334
Add Diagram explanation to README
hnd14 Sep 18, 2024
4e36654
Update Checkout and Order States
nashtech-vietvuhoang1 Sep 18, 2024
b8004b6
Update Checkout Process
nashtech-vietvuhoang1 Sep 18, 2024
0d6836d
Update order process design readme to match the updated design
hnd14 Sep 19, 2024
e25c708
Payment Flow
nashtech-vietvuhoang1 Sep 19, 2024
ad51287
Merge branch 'docs/1008-payment-process' into docs/1008-order-process
nashtech-vietvuhoang1 Sep 19, 2024
4b59e2b
Update Readme for paymentflow
nashtech-vietvuhoang1 Sep 19, 2024
e55d5b6
Update Stock before payment
nashtech-vietvuhoang1 Sep 20, 2024
76abd7d
Support COD on payment flow
nashtech-vietvuhoang1 Sep 23, 2024
2db8b26
[1008] update payment flow for async
nashtech-vietvuhoang1 Sep 23, 2024
b3fe5e4
Update order flow design README
hnd14 Sep 24, 2024
9672cf1
Update flow
nashtech-vietvuhoang1 Sep 24, 2024
f72ba2b
Break payment flow down into smaller phases
hnd14 Sep 24, 2024
972e8a1
Format README.md
hnd14 Sep 25, 2024
c28f7b6
Update overview diagram, move delete card to after order placement, …
hnd14 Sep 25, 2024
e68f30a
Update promocode usage flow, update README text
hnd14 Sep 25, 2024
1285ca7
Update Shopping Cart when Order is placed already
nashtech-vietvuhoang1 Sep 26, 2024
c0f2beb
Add README for payment paypal
hnd14 Sep 24, 2024
86a41c2
README first revison
hnd14 Sep 26, 2024
97d3382
Update to simplify diagrams for promocode application
hnd14 Sep 26, 2024
918f985
Simplify payment flow
hnd14 Sep 26, 2024
b3c63cf
Update developer-guidelines.md for elasticsearch (#1085)
HnKnA Sep 27, 2024
5acee04
#1083 Allow users to select items to checkout (#1096)
mochacr0 Sep 27, 2024
d7916b6
[Common library] Config common library for reuse test class and test …
khanhduzz Sep 30, 2024
eb1a97f
#1022 - Automation test (#1092)
chinhduongthi Sep 30, 2024
f43f566
Optimize elasticsearch & Add more search criteria (#1088)
minhtranq-nashtechglobal Sep 30, 2024
4bfb2a0
#1037 - The quantity doesn't increase if the same product code (#1081)
duylv27 Sep 30, 2024
10df82e
#1064 [BACKOFFICE] [Bugs] Product Variations - select product variant…
nashtech-tuannguyenhuu1 Sep 30, 2024
e56bd85
Update backoffice-ci.yaml (#1109)
thiennn Sep 30, 2024
e5da0c4
#882 Create a shared project (#1089)
nashtech-huyphamphu Oct 1, 2024
6683b5e
config common library for test in some modules (#1098)
khanhduzz Oct 1, 2024
f78dd5c
#1064 [BACKOFFICE] [Bugs] Product Variations - distinct options (#1114)
nashtech-tuannguyenhuu1 Oct 1, 2024
8e8de52
#1008 add detail design
nashtech-vietvuhoang1 Oct 2, 2024
9b3e7d2
#1064 [BACKOFFICE] [Bugs] Product Variations - delete options (#1118)
nashtech-tuannguyenhuu1 Oct 2, 2024
0e1a516
Config IT to integrate with common-library (#1113)
khanhduzz Oct 2, 2024
be4d1af
#1086 [BACKOFFICE] [Bugs] Product Attributes - Product List View - Re…
VanCongBang Oct 2, 2024
9082c17
#1120 fix bug cannot logout (#1122)
nguyenvanhadncntt Oct 3, 2024
649ef91
#1099 Add to cart (#1124)
mochacr0 Oct 4, 2024
266be55
#1112[Search] Re-configure search filter (#1125)
HnKnA Oct 7, 2024
9520500
#882 create a shared project (#1123)
nashtech-huyphamphu Oct 8, 2024
d4ed2a8
Remove old option values before update products (#1097)
NhatTranMinh15 Oct 8, 2024
b190def
#1126 add weight and dimension for product (#1132)
nguyenvanhadncntt Oct 8, 2024
20e163e
#1128 [BACKOFFICE] [Bugs] Add some boxes in the homepage of the backo…
nashtech-tuannguyenhuu1 Oct 8, 2024
aca4fd2
revert moving cart API to order module (#1136)
mochacr0 Oct 8, 2024
e647ccb
#793 Upgrade to next.js 14 (#1143)
danhnguyenv1 Oct 9, 2024
ec366a1
[Share project] refactor common config and exception handler in webho…
khanhduzz Oct 9, 2024
cfad76d
#1099 Move add cart item API to cart module (#1141)
mochacr0 Oct 9, 2024
679631c
#1133 - [Promotion] Fix bug duplicate option, validate date, show isA…
LoanNguyenT5 Oct 10, 2024
ee4267a
#882 Create a shared project (#1152)
nashtech-huyphamphu Oct 10, 2024
6809952
Update Payment flow
nashtech-vietvuhoang1 Oct 10, 2024
fb2249d
#1155 fix bug wrong price mapping to get product API response (#1156)
nguyenvanhadncntt Oct 10, 2024
a91a139
#1099 Implement update & get cart items APIs (#1153)
mochacr0 Oct 11, 2024
faf4a83
#1128 [BACKOFFICE] [Bugs] Add some boxes in the homepage of the backo…
nashtech-tuannguyenhuu1 Oct 11, 2024
1420c85
#1128 [BACKOFFICE] [Bugs] Fixing for handle exception (#1160)
nashtech-tuannguyenhuu1 Oct 11, 2024
baf7e28
#1102 - Embedding-based product similarity search (#1139)
duylv27 Oct 11, 2024
ff4d73e
config elastic search IT with common library (#1154)
khanhduzz Oct 14, 2024
cb6b212
#1099 Implement bulk delete cart items & delete single item APIs (#1165)
mochacr0 Oct 14, 2024
eeaf29a
Authentication and session handling in BFF doesn't work in cluster mo…
khanhtrand Oct 14, 2024
8b4c8f9
#1184 Apply promotion discount on cart page of storefront (#1186)
nguyenvanhadncntt Oct 15, 2024
430d1d1
#1102 - Add recommendation-ci.yaml & setup deployment for recommendat…
duylv27 Oct 16, 2024
c6405a4
[Storefront] Reformat apiClientService(Done) (#1166)
HnKnA Oct 16, 2024
e831407
Issue #1142: format number input (#1194)
DinhThaiVV Oct 16, 2024
c09fd0b
#1105 process to checkout - AC1: Create API to get Product informatio…
khanhduzz Oct 17, 2024
a8cd2f4
#1099 Integrate cart UI with new APIs (#1195)
mochacr0 Oct 18, 2024
be2a354
[Storefront] Enhance to automatically fill the default shipping addre…
danhnguyenv1 Oct 18, 2024
bd4576e
#1150 [Recommendation] Adjust product detail page to show similar pro…
chinhduongthi Oct 18, 2024
6b9a4e9
create customer page (#1202)
toannguyenk Oct 21, 2024
cfcfd40
#1146 [Order] Common export csv file for basic table (#1191)
nashtech-longlevanquoc1 Oct 21, 2024
7cb0302
#1198-update-the-order-checkout-payment-tables (#1213)
nashtech-tuannguyenhuu1 Oct 21, 2024
18d0da7
#1071 - Appy retry mechanism for automation test (#1211)
chinhduongthi Oct 22, 2024
9b4083e
#1185 - Integration Test for Kafka/ElasticSearch (#1197)
duylv27 Oct 22, 2024
fdfa742
#1099 Clean up old cart API classes (#1205)
mochacr0 Oct 23, 2024
61c4f7c
#1148 - Enhance Error Handler, Serialize, Deserialize (#1182)
duylv27 Oct 23, 2024
a5cea8f
#1115 Enhance grafana http metrics panels (#1217)
mochacr0 Oct 23, 2024
92b1787
#1196 fix issue missing payment method and additional validation othe…
nguyenvanhadncntt Oct 23, 2024
de556fd
Feature/1175 delivery service (#1200)
DinhThaiVV Oct 23, 2024
7bc4ef8
#1215 - Apply promotion code in cart (#1216)
LoanNguyenT5 Oct 23, 2024
d8b6d28
#1218 - Fix product attribute mapping and backoffice UI (#1221)
khanhduzz Oct 23, 2024
9e83bcd
[Storefront] [Category] Create api to get the top n categories (#1220)
HnKnA Oct 23, 2024
12ccc8f
#1201 - [Backoffice] - Unable to add or edit Product Options due to r…
VanCongBang Oct 23, 2024
b71e60a
Fix postgres docker build fail (#1228)
khanhtrand Oct 24, 2024
9576d76
#1214 [Storefront & Backoffice] Payment was successfully processed,…
danhnguyenv1 Oct 24, 2024
da72516
Fix issue can;t update payment status for order service (#1238)
danhnguyenv1 Oct 28, 2024
5e44987
#1234 update MediaType import (#1240)
mochacr0 Oct 28, 2024
225337b
Update product sync (#1241)
toannguyenk Oct 29, 2024
df23875
Configure UI for keyword suggestions search (#1229)
HnKnA Oct 29, 2024
54c7bf2
Update payment methods to Checkout Object (#1242)
nashtech-huyphamphu Oct 29, 2024
89b05fe
#1234 - Update dependencies to recent latest version (#1235)
nashtech-diepnguyenngoc1 Oct 30, 2024
0a49d70
#1206 product: Allow admin to add multiple values for option (#1244)
nguyenvanhadncntt Oct 30, 2024
ddef30e
[BackOffice][Add/Edit product] Should validate length > width (#1245)
toannguyenk Oct 31, 2024
f3de565
Feature/1003 payment provider (#1243)
khanhtrand Oct 31, 2024
fd49ac9
Add validate vs dirty check to price field (#1250)
HnKnA Oct 31, 2024
9e9e80f
#1199 - Add UT for recommendation service (#1207)
duylv27 Nov 1, 2024
c8b3afc
#1174: Apply promotion code when checkout (#1247)
LoanNguyenT5 Nov 1, 2024
59461da
#1249: Refactor entity relationship 1-n (#1255)
nashtech-tuannguyenhuu1 Nov 1, 2024
1e78a14
fix previous commit had re-added payment-paypal service (#1258)
thiennn Nov 4, 2024
af2c942
#1135 - Revise helm charts and update k8s deployment (#1256)
nashtech-diepnguyenngoc1 Nov 4, 2024
7bcc8a6
Catch average star error in product detail page (#1253)
HnKnA Nov 5, 2024
db997a9
Integration test for recommendation. (#1257)
chinhduongthi Nov 6, 2024
8a93fb3
disable warning react-hooks/exhaustive-deps (#1265)
toannguyenk Nov 8, 2024
d95476f
#1135 - Revise helm charts and update k8s deployment (#1266)
nashtech-diepnguyenngoc1 Nov 11, 2024
197d6f4
#1227 - Handling hard delete data from Sample Data (#1252)
duylv27 Nov 11, 2024
978b380
#1183 Feat: Modal for selecting the display-type of Product Option an…
khanhduzz Nov 14, 2024
7f3f85f
edit and delete customer (#1262)
toannguyenk Nov 18, 2024
3962000
Merge branch 'docs/1008-order-process' of https://github.com/nashtech…
khanhduzz Nov 18, 2024
3bf0dc2
merge with main and add checkout-api flow
khanhduzz Nov 18, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,6 @@ hs_err_pid*
.settings*
.vscode
*.iml
out
out/**
*.bkp
83 changes: 83 additions & 0 deletions docs/design/order-flows/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# Order Processing flow

## Overview

![Order Flow overview](./imgs/orders.drawio.png)

*Checkout* will be created based on the product items on *Shopping Cart*.

*Order* will be created based on the *Checkout*.

**Design choice notes:**
- We decided to create an *Order* only after *Payment* for it has been confirmed. By doing this, the fulfilment cycle can be started immediately after an *Order* has been created, minimizing possible confusion later on.
## Checkout Flow

### Checkout Lifecycle
![Checkout Lifecycle](./imgs/Checkout%20Lifecycle.png)

When the user begins the checkout process, the `Checkout` object is created by copying all products the user wants to purchase with their desired quantities, allowing the user to focus on making the decision to place an order. The `Checkout` object will also contains information collected before the order is placed.
- It will be created with the `CHECKED_OUT` status when the user start the checkout process by clicking the *"Proceed to checkout"* button on the *Cart page*. At this stage, the `Checkout` object will only contains the products' types and quantities that the customer wants to order.
- The customer will then update the `Checkout` object with their desired shipping address, shipping provider, and payment method information.
- After all the information required has been fulfilled and reflects the customer desired order, the payment amount with detailed breakdown can be calculated and review by the customer after which they can confirm, and start the payment process. This will change that state of the `Checkout` object to `PAYMENT_PROCESSING`.
- After the payment has been processed and confirmed by the `payment-confirmed` action, the `Checkout` object will be changed to the `PAYMENT_CONFIRMED` state. At this stage, the system can start the `create-order` process, which will place the necessary block on the inventory, and create a new order for the customer.
- In case some products in the `Checkout` object is out-of-stock or the `process-payment` action encounters an error, the `Checkout` object's status will be revert back to `CHECKED_OUT`. The last encountered error will also be attached to the `Checkout` object
- After an order has been placed, the `Checkout` has served its purpose, thus its state will be changed to `FULFILLED`.

### Checkout flow

![Checkout Flow](./imgs/Checkout%20Flow.png)
The Checkout flow happens between when the user begin the checkout process and the start of the payment process. This process includes:
- User start this process by navigating to the *Cart page* and click on *"Proceed to check out"* after choosing all the desired items and their amount. The system will start the checkout process by creating a `Checkout` object by copying the user's current cart and then clear the cart.
- The system then prompt the user for additional information that is necessary for the order placing process. This includes showing the customer available shipping provider, payment provider, their address saved by the system, as well as a form for customer to input a new address should they need to.
- The user will then input the requested information into the system and continually update their `Checkout` object. After all the necessary information for the object has been inputed, an event to calculate total order amount, delivery fee, and tax amount will be triggered and the result will be displayed to the customer.
- The user can also input a promocode into the checkout, which will trigger a validation event to validate the code. If the promocode is valid, it will be added to the `Checkout` object and trigger a CDC Event to recalculate the payment amount and return the new total to `Storefront` to be displayed.
- The user can iteratively change their order information at this step. After each change, the order amount, delivery fee, and tax amount will be recalculated and displayed to them.
- After the customer is satisfied with all their information, they will confirm by clicking *"Proceed to payment"* at which point the system will start the payment process for the order.

### Payment flow

![Payment Flow](./imgs/Payment%20Flow.png)

The payment flow is the point at which the customer confirm their payment for the order so that the system can place their order and start the fulfilment cycle. This process can be divided into 3 phases including:

![Payment Flow Sub 1](./imgs/Payment%20Flow%20Sub%201.png)

- The first phase's goal is to create an internal `PaymentCheckout` object that will keep track of the payment status for the order. This phase includes the following steps:
- The Customer will start this phase by clicking *"Proceed to payment"* on the *Checkout page*. This will send a request to start the payment process to the `Order Service`.
- The `Order Service` will then send a request to `Promotion Service` to create a usage of the promocode in the checkout (if exists). If this step fail then the payment flow will fail and the `Checkout` object will go back to the previous stage. The promocode will also be automatically removed from the `Checkout` object.
- The `Order Service` will then request the `Inventory service` to place a reservation on the products requested in the `Checkout` object.
- In case the reservation process fail due to some products being out of stock, the `Inventory Service` will return the error to the `Order Service` which will forward it to `Storefront`. The `Storefront` will then notified the Customer and stop the payment process. If the promocode was applied previously, it will also be rollbacked by an asynchronous event.
- If the reservation process succeed, the `Order Service` will trigger the creation of a `CheckoutPayment` object which will be managed by the `Payment Service`. Information about this object will be send back to the `Storefront` page which marks the end of phase 1. At the end of this phase, a `CheckoutPayment` object for the order must have been created.

![Payment Flow Sub 2](./imgs/Payment%20Flow%20Sub%202.png)
- The second phase of the payment process will concern the communication with the external payment provider and creating a `Checkout` object on their server to serve as a basis for the Payment process. This phase includes the following steps:
- The creation of an internal `CheckoutPayment` object will be captured with a CDC event which will trigger the start of this phase.
- If the created `CheckoutPayment`'s `payment_type` is not `COD` and its `status` is `NEW`, the `Payment Service` will then contact the external payment provider to create a Checkout object on their server with a reference id which will be sent back to the `Payment Service`.
- The `Payment Service` will then update this id into the `CheckoutPayment` object and change its status to `PROCESSING`.
- At the end of this stage, the `CheckoutPayment` object status need to be changed to `PROCESSING`, and in case `payment_type` is not `COD`, the `CheckoutPayment` object should contains the external payment provider's `Checkout`'s id.

![Payment Flow 3](./imgs/Payment%20Flow%20Sub%203.png)
- The final phase of the payment process will concern the payment completion and placing order into our system. This phase includes the steps below:
- After receiving the `CheckoutPayment` object id from phase 1, the `Storefront` page will periodically query the `Payment Service` for the status of the `CheckoutPayment` object. This will be repeated until the `CheckoutPayment`'s status changed to `PROCESSING`.
- The `Storefront` page will then navigate the user to the external payment provider payment page using the provided external payment provider's `Checkout` object's id. The customer can execute the payment on the external provider page.
- After the payment has been processed by the external provider, they will navigate the customer back to the *Payment confirmation page* of our `Storefront`.
- At the same time, the external payment provider will also notify our `Backend` through a webhook registered to them. This webhook will then trigger the `Payment Completed` chain in our system, change the `CheckoutPayment` object status to `PAYMENT_COMPLETED`, notify the customer and create an `Order` object with the `PAYMENT_CONFIRMED` status in our system. After the `Order` is created, the items that has been placed in the order is then removed from the `Shopping Cart`.
- After this phase, an `Order` object must be created in our system. This object will be the starting point for the order fulfilment cycle.
- After the `Order` object has been created, we will send a notification to the customer, then the `Storefront` can request and display the `Order` info to Customer.

## Order Processing

The Order will be created after the payment processed is finished and will be the entry point for the fulfilment cycle.

### Order Lifecycle

![Order Lifecycle](./imgs/Order%20Lifecycle.png)

- After the payment has been confirmed for the order by the `Payment Service`, an `Order` with `PAYMENT_CONFIRMED` status will be created from the relevant `Checkout` object .
- At this point, the warehouse workers can trigger the action `prepare-parcel` after the have package the order items, which will change the order status to `READY_TO_SHIP`, at which point the desired delivery provider can be contacted to come and pick up the parcel
- After the parcel has been picked up, the action `ship-parcel` will be triggered and the `Order`'s state will be changed to `SHIPPED`.
- When the shipper reach the destination, they can trigger the action `deliver-parcel`, which will change the `Order`'s status to `RECEIVED`, at which point the customer can trigger the `confirm-receipt` action and change the `Order`'s status to `CONFIRMED`, which completes the order.
- During the shipping process (when the order is at the `SHIPPED` state), the shipper can also trigger the `report-failure` action, which will change the order status to `SHIPMENT_FAILED` and start the refund process to refund the payment to the customer.
- At any point before the `Order` reached the `RECEIVED` state, the customer can trigger the `cancel` action, which will notify the shop of their cancel request and change the `Order` state to `CANCEL_REQUESTED`.
- At this point, the shop will start the `refund` action and start the refunding process as well as recollect the shipment as required.
- After the `refund-confirm` action triggered to confirm that the refund process has finished, the order status will be changed to `CANCELLED`.
61 changes: 61 additions & 0 deletions docs/design/order-flows/diagrams/YAS.drawio
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<mxfile host="Electron" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.8 Chrome/128.0.6613.36 Electron/32.0.1 Safari/537.36" version="24.7.8">
<diagram id="q6kRX4-M01hZTGkx8Dg6" name="OrderFlow">
<mxGraphModel dx="1420" dy="822" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="0NfagcmIJmzYptjgjSYn-4" value="Check-out" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="0NfagcmIJmzYptjgjSYn-2" target="rPNVTWdC8MnqqpMeGFjJ-1" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0NfagcmIJmzYptjgjSYn-3" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#d6b656;strokeWidth=2;" parent="1" vertex="1">
<mxGeometry x="250" y="100" width="350" height="80" as="geometry" />
</mxCell>
<mxCell id="0NfagcmIJmzYptjgjSYn-2" value="" style="verticalLabelPosition=bottom;shadow=0;dashed=0;align=center;html=1;verticalAlign=top;strokeWidth=1;shape=mxgraph.mockup.misc.shoppingCart;strokeColor=#d79b00;fillColor=#ffe6cc;" parent="1" vertex="1">
<mxGeometry x="110" y="115" width="50" height="50" as="geometry" />
</mxCell>
<mxCell id="0NfagcmIJmzYptjgjSYn-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fillColor=#f5f5f5;strokeColor=#666666;endArrow=none;endFill=0;dashed=1;" parent="1" source="0NfagcmIJmzYptjgjSYn-5" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="225" y="140" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="0NfagcmIJmzYptjgjSYn-5" value="&lt;h1 style=&quot;margin-top: 0px;&quot;&gt;&lt;font style=&quot;font-size: 16px;&quot;&gt;Check out&lt;/font&gt;&lt;/h1&gt;&lt;p&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;- Create Checkout Object from Shopping Cart&lt;/span&gt;&lt;/p&gt;" style="text;html=1;whiteSpace=wrap;overflow=hidden;rounded=0;fillColor=#f5f5f5;fontColor=#333333;strokeColor=none;" parent="1" vertex="1">
<mxGeometry x="150" y="240" width="150" height="120" as="geometry" />
</mxCell>
<mxCell id="0NfagcmIJmzYptjgjSYn-7" value="Order" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="680" y="120" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="rPNVTWdC8MnqqpMeGFjJ-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;strokeColor=#666666;align=center;verticalAlign=middle;fontFamily=Helvetica;fontSize=11;fontColor=default;labelBackgroundColor=default;endArrow=none;endFill=0;fillColor=#f5f5f5;" edge="1" parent="1" source="0NfagcmIJmzYptjgjSYn-9">
<mxGeometry relative="1" as="geometry">
<mxPoint x="635" y="140" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="0NfagcmIJmzYptjgjSYn-9" value="&lt;h1 style=&quot;margin-top: 0px;&quot;&gt;&lt;font style=&quot;font-size: 16px;&quot;&gt;Place Order&lt;/font&gt;&lt;/h1&gt;&lt;p&gt;- Create &lt;b&gt;Order &lt;/b&gt;with Payment Info and Delivery Info&lt;br&gt;- Update Shopping Cart&lt;/p&gt;" style="text;html=1;whiteSpace=wrap;overflow=hidden;rounded=0;fillColor=#f5f5f5;fontColor=#333333;strokeColor=none;" parent="1" vertex="1">
<mxGeometry x="560" y="240" width="150" height="120" as="geometry" />
</mxCell>
<mxCell id="rPNVTWdC8MnqqpMeGFjJ-3" value="Proceed&lt;br&gt;to Payment" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="rPNVTWdC8MnqqpMeGFjJ-1" target="rPNVTWdC8MnqqpMeGFjJ-2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="rPNVTWdC8MnqqpMeGFjJ-1" value="CHECKED-OUT" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1">
<mxGeometry x="270" y="120" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="rPNVTWdC8MnqqpMeGFjJ-4" value="Place Order" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="rPNVTWdC8MnqqpMeGFjJ-2" target="0NfagcmIJmzYptjgjSYn-7">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="rPNVTWdC8MnqqpMeGFjJ-2" value="PAYMENT-CONFIRMED" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
<mxGeometry x="470" y="120" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="rPNVTWdC8MnqqpMeGFjJ-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;strokeColor=#666666;align=center;verticalAlign=middle;fontFamily=Helvetica;fontSize=11;fontColor=default;labelBackgroundColor=default;endArrow=none;endFill=0;fillColor=#f5f5f5;" edge="1" parent="1" source="rPNVTWdC8MnqqpMeGFjJ-7">
<mxGeometry relative="1" as="geometry">
<mxPoint x="435" y="140" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rPNVTWdC8MnqqpMeGFjJ-7" value="&lt;h1 style=&quot;margin-top: 0px;&quot;&gt;&lt;font style=&quot;font-size: 16px;&quot;&gt;Payment&lt;/font&gt;&lt;/h1&gt;&lt;p&gt;- Lock Innventory&lt;br&gt;- Process Payment with Payment Provider&lt;/p&gt;" style="text;html=1;whiteSpace=wrap;overflow=hidden;rounded=0;fillColor=#f5f5f5;fontColor=#333333;strokeColor=none;" vertex="1" parent="1">
<mxGeometry x="360" y="240" width="150" height="120" as="geometry" />
</mxCell>
<mxCell id="rPNVTWdC8MnqqpMeGFjJ-8" value="&lt;b&gt;Checkout&lt;/b&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="360" y="98" width="110" height="24" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
Loading
Loading