Service - Cart: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 71: | Line 71: | ||
}, | }, | ||
totalQuantity: {}, | totalQuantity: {}, | ||
totalValue: {}, // will be in the currency of the | totalValue: {}, // will be in the currency of the deliveryMethod selected (which will validate as all sellOffers must offer that deliveryMethod) | ||
name: {}, | name: {}, | ||
status: {}, // validating|valid|invalid | status: {}, // validating|valid|invalid|partiallyValid | ||
dateValidated: {}, // date last time validated | dateValidated: {}, // date last time validated | ||
}, | }, | ||
Line 250: | Line 250: | ||
* One care can have many sellOffers from many sellers/sellOfferPlans etc that cannot be purchased as a single order | * 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 | * When validating split out into multiple orders according to what can be combined into a single payment/order | ||
== Grouping into orders == | |||
* Done when validating cart | |||
* Go through each selloffer: | |||
*# does it offer the cart's paymentMethod? If not is invalid | |||
*# does its offer the cart's deliveryMethod? If not is invalid | |||
*# does the quantity chosen validate sellOffer available qty/minimum quantity? If not is invalid | |||
*# if no sellOffers valid then cart status is invalid. If some sellOffers invalid then cart status is partiallyValid | |||
*# if sellOffer does not combine then it gets put into it's own order | |||
*# split sellOffers by seller and stock location | |||
= Data model notes = | = Data model notes = | ||
* Not storing history of cart details, consider this data transient and of low importance, no need to have record of changes | * Not storing history of cart details, consider this data transient and of low importance, no need to have record of changes | ||
= Ideas = | |||
* cart service could have function for testing multiple prices, find all payment methods and delivery methods offered by all sell offers in cart, then find total price for each combination (maybe also check all delivery methods ship to selected destination?) | |||
= Working documents = | = Working documents = |
Revision as of 11:54, 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 deliveryMethod selected (which will validate as all sellOffers must offer that deliveryMethod)
name: {},
status: {}, // validating|valid|invalid|partiallyValid
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
Grouping into orders
- Done when validating cart
- Go through each selloffer:
- does it offer the cart's paymentMethod? If not is invalid
- does its offer the cart's deliveryMethod? If not is invalid
- does the quantity chosen validate sellOffer available qty/minimum quantity? If not is invalid
- if no sellOffers valid then cart status is invalid. If some sellOffers invalid then cart status is partiallyValid
- if sellOffer does not combine then it gets put into it's own order
- split sellOffers by seller and stock location
Data model notes
- Not storing history of cart details, consider this data transient and of low importance, no need to have record of changes
Ideas
- cart service could have function for testing multiple prices, find all payment methods and delivery methods offered by all sell offers in cart, then find total price for each combination (maybe also check all delivery methods ship to selected destination?)