Service - Cart: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 245: | Line 245: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
= Cart Orders = | |||
* One care can have many sellOffers from many sellers/sellOfferPlans etc that cannot be purchased as a single order | |||
* When validating split out into multiple orders according to what can be combined into a single payment/order | |||
= Data model notes = | |||
* Not storing history of cart details, consider this data transient and of low importance, no need to have record of changes | |||
= Working documents = | = Working documents = |
Revision as of 11:29, 31 October 2021
Overview
Manages a shopping cart of sell offers prior to confirming as order/s.
Repository
https://bitbucket.org/izara-market-orders/izara-market-orders-cart
DynamoDB tables
Standard Config Table Per Service
Configuration tags
{
configTag: "SellOfferManagerServiceName"
configKey: "SellOfferManagerServiceName"
configValue: xxx // eg: "SellOfferManager"
}
{
configTag: "DeliveryMethodManagerServiceName"
configKey: "DeliveryMethodManagerServiceName"
configValue: xxx // eg: "DeliveryMethodManager"
}
{
configTag: "PaymentMethodManagerServiceName"
configKey: "PaymentMethodManagerServiceName"
configValue: xxx // eg: "PaymentMethodManager"
}
{
configTag: "SellOfferPlanServiceName"
configKey: "SellOfferPlanServiceName"
configValue: xxx // eg: "SellOfferPlan"
}
{
configTag: "OrderGraphServiceName"
configKey: "OrderGraphServiceName"
configValue: xxx // eg: "OrderGraph"
}
Graph database
Service - Orders Graph
Nodes
{
nodeLabel: "{CartPlanLib.CART_GRAPH_NODE_LABEL}", // "cart"
schema: {
identifier: true,
restrictProperties: true,
restrictRelationships: true,
properties: {
cartId: {
identifier: true, // create unique id from request params and uniqueMessageId
},
totalQuantity: {},
totalValue: {}, // will be in the currency of the paymentMethod selected (when changes need to re-calculate)
name: {},
status: {}, // validating|valid|invalid
dateValidated: {}, // date last time validated
},
}
}
{
nodeLabel: "{CartPlanLib.CART_SELLOFFERLINK_GRAPH_NODE_LABEL}", // "cartSellOfferLink"
schema: {
identifier: true,
restrictProperties: true,
restrictRelationships: true,
properties: {
cartSellOfferLinkId: {
identifier: true, // create unique id from request params and uniqueMessageId
},
quantity: {},
valid: {}, // true|false depending on last validation check
},
}
}
{
nodeLabel: "{CartPlanLib.CARTORDER_GRAPH_NODE_LABEL}", // "cartOrder"
schema: {
identifier: true,
restrictProperties: true,
restrictRelationships: true,
properties: {
cartOrderId: {
identifier: true, // create unique id from request params and uniqueMessageId
},
totalQuantity: {},
totalValue: {}, // will be in the currency of the paymentMethod selected (when changes need to re-calculate)
},
}
}
Relationships
{
relationshipType: "{CartPlanLib.createHasActiveCartGraphRelationshipType()}", // "hasActive_cart"
schema: {
elementCanBeRemoved: true,
allPropertiesImmutable: true,
restrictProperties: true,
properties: {
originTimestamp: //timestamp the request to create/change this relationship was sent
},
}
}
{
relationshipType: "{CartPlanLib.createHasCompletedCartGraphRelationshipType()}", // "hasCompleted_cart"
schema: {
elementCanBeRemoved: true,
allPropertiesImmutable: true,
restrictProperties: true,
properties: {
originTimestamp: //timestamp the request to create/change this relationship was sent
},
}
}
{
relationshipType: "{CartPlanLib.createHasDeletedCartGraphRelationshipType()}", // "hasDeleted_cart"
schema: {
elementCanBeRemoved: true,
allPropertiesImmutable: true,
restrictProperties: true,
properties: {
originTimestamp: //timestamp the request to create/change this relationship was sent
},
}
}
- links a user to a cart
- a cart can either be active, completed, or deleted
{
relationshipType: "{CartPlanLib.cartPaymentMethodGraphRelationshipType()}", // "cart_paymentMethod"
schema: {
elementCanBeRemoved: true,
allPropertiesImmutable: true,
restrictProperties: true,
properties: {
originTimestamp: //timestamp the request to create/change this relationship was sent
},
}
}
- links a cart to it's current paymentMethod setting
{
relationshipType: "{CartPlanLib.cartDeliveryMethodGraphRelationshipType()}", // "cart_deliveryMethod"
schema: {
elementCanBeRemoved: true,
allPropertiesImmutable: true,
restrictProperties: true,
properties: {
originTimestamp: //timestamp the request to create/change this relationship was sent
},
}
}
- links a cart to it's current deliveryMethod setting
{
relationshipType: "{CartPlanLib.createHasCartSellOfferLinkGraphRelationshipType()}", // "has_cartSellOfferLink"
schema: {
elementCanBeRemoved: true,
allPropertiesImmutable: true,
restrictProperties: true,
properties: {
originTimestamp: //timestamp the request to create/change this relationship was sent
},
}
}
{
relationshipType: "{CartPlanLib.createCartSellOfferLinkIsSellOfferGraphRelationshipType()}", // "cartSellOfferLinkIs_sellOffer"
schema: {
elementCanBeRemoved: true,
allPropertiesImmutable: true,
restrictProperties: true,
properties: {
originTimestamp: //timestamp the request to create/change this relationship was sent
},
}
}
- Links cartSellOfferLink to one sellOffer
{
relationshipType: "{CartPlanLib.createCarthasCartOrderGraphRelationshipType()}", // "has_cartOrder"
schema: {
elementCanBeRemoved: true,
allPropertiesImmutable: true,
restrictProperties: true,
properties: {
originTimestamp: //timestamp the request to create/change this relationship was sent
},
}
}
{
relationshipType: "{CartPlanLib.createCartOrderHasCartSellOfferLinkGraphRelationshipType()}", // "cartOrderHas_cartSellOfferLink"
schema: {
elementCanBeRemoved: true,
allPropertiesImmutable: true,
restrictProperties: true,
properties: {
originTimestamp: //timestamp the request to create/change this relationship was sent
},
}
}
Cart Orders
- One care can have many sellOffers from many sellers/sellOfferPlans etc that cannot be purchased as a single order
- When validating split out into multiple orders according to what can be combined into a single payment/order
Data model notes
- Not storing history of cart details, consider this data transient and of low importance, no need to have record of changes