Service - Delivery Method Standard: Difference between revisions

From Izara Wiki
Jump to navigation Jump to search
No edit summary
 
(29 intermediate revisions by 2 users not shown)
Line 6: Line 6:


https://bitbucket.org/izara-market-products/izara-market-products-delivery-method-standard
https://bitbucket.org/izara-market-products/izara-market-products-delivery-method-standard
= Schemas =
==ObjectSchemas==
extendObjType:deliveryMethod
===deliveryMethodStandard===
<syntaxhighlight lang="JavaScript">
{
  "objectType": "deliveryMethodStandard",
  "extendObjType": {
    "serviceTag": "DeliveryMethodMgr",
    "objectType": "deliveryMethod"
  },
  "storageResources": {
    "graph": {
      "storageType": "graph",
      "graphServerTag": "GraphHandler"
    },
    "dynamoDB": {
      "storageType": "dynamoDB",
      "tableName": "DeliveryMethodRecord",
      "serviceTag": "DeliveryMethodMgr"
    }
  },
  "addOnDataStructure": [
    {
      "type": "versionedData",
      "versionedDataLabel": "deliveryMethodSettings",
      "storageResourceTag": "graph",
      "fieldNames": {
        "defaultValueType": {
          "type": "string",
          "requiredOnCreate": true,
          "optionalOnCreate": false,
          "canUpdate": true,
          "validation": {
            "pattern": "^[a-zA-Z0-9_-]+$"
          }
        },
        "defaultValueId": {
          "type": "string",
          "requiredOnCreate": true,
          "optionalOnCreate": false,
          "canUpdate": true,
          "validation": {
            "pattern": "^[a-zA-Z0-9_-]+$"
          }
        },
        "defaultValueLanguageId": {
          "type": "string",
          "requiredOnCreate": true,
          "optionalOnCreate": false,
          "canUpdate": true,
          "validation": {
            "pattern": "^[a-zA-Z0-9_-]+$"
          }
        },
        "defaultAccumulateValue": {
          "type": "boolean",
          "requiredOnCreate": true,
          "optionalOnCreate": false,
          "canUpdate": true,
          "validation": {
          }
        }
      }
    },
    {
      "type": "propertyValue"
    }
  ],
  "fieldNames": {},
  "generatedBy": "userGenerated"
}
</syntaxhighlight>
*Property
=== deliveryMethodStandardPropertyLabel ===
<syntaxhighlight lang="JavaScript">
{
  "objectType": "deliveryMethodStandardPropertyLabel",
  "addOnDataStructure": [
    {
      "type": "translation"
    }
  ],
  "canDelete": true,
  "storageResources": {
    "graph": {
      "storageType": "graph",
      "graphServerTag": "GraphHandler"
    }
  },
  "fieldNames": {
    "deliveryMethodStandardPropertyLabelId": {
      "type": "string",
      "requiredOnCreate": false,
      "optionalOnCreate": false,
      "canUpdate": false,
      "randomOnCreate": true,
      "validation": {
        "pattern": "^[a-zA-Z0-9-_]+$"
      },
      "storageResourceTags": [
        "graph"
      ]
    }
  },
  "identifiers": [
    {
      "type": "identifier",
      "fieldName": "deliveryMethodStandardPropertyLabelId"
    }
  ],
  "generatedBy": "userGenerated"
}
</syntaxhighlight>
=== deliveryMethodStandardPropertyValue ===
<syntaxhighlight lang="JavaScript">
{
  "objectType": "deliveryMethodStandardPropertyValue",
  "addOnDataStructure": [
    {
      "type": "translation"
    }
  ],
  "canDelete": true,
  "storageResources": {
    "graph": {
      "storageType": "graph",
      "graphServerTag": "GraphHandler"
    }
  },
  "fieldNames": {
    "deliveryMethodStandardPropertyValueId": {
      "type": "string",
      "requiredOnCreate": false,
      "optionalOnCreate": false,
      "canUpdate": false,
      "randomOnCreate": true,
      "validation": {
        "pattern": "^[a-zA-Z0-9-_]+$"
      },
      "storageResourceTags": [
        "graph"
      ]
    }
  },
  "identifiers": [
    {
      "type": "identifier",
      "fieldName": "deliveryMethodStandardPropertyValueId"
    }
  ],
  "generatedBy": "userGenerated"
}
</syntaxhighlight>
==relationshipSchemas==
*'''RelationshipTags'''
===fromLocationNode===
<syntaxhighlight lang="JavaScript">
{
  "relationshipServiceTag": "DelivMethodSTD",
  "fieldNames": {
    "originTimeStamp": {
      "type": "number",
      "requiredOnCreate": false,
      "canUpdate": true,
      "validation": {
      },
      "optionalOnCreate": true
    },
    "relId": {
      "type": "string",
      "generatedField": true,
      "requiredOnCreate": false,
      "optionalOnCreate": false,
      "canUpdate": false,
      "validation": {
      }
    }
  },
  "storageResources": {
    "graph": {
      "storageType": "graph",
      "graphServerTag": "GraphHandler"
    }
  },
  "links": [
    {
      "storageResourceTags": [
        "graph"
      ],
      "from": {
        "objType": {
          "serviceTag": "Locations",
          "objectType": "locationNode"
        },
        "linkType": "one",
        "handler": true,
        "requiredOnCreate": false
      },
      "to": {
        "objType": {
          "serviceTag": "DelivMethodSTD",
          "objectType": "deliveryMethodStandard"
        },
        "linkType": "many",
        "requiredOnCreate": true,
        "handler": true
      },
      "canDelete": false
    }
  ],
  "canMove": false
}
</syntaxhighlight>
===ownsDeliveryMethodRateTable===
<syntaxhighlight lang="JavaScript">
{
  "relationshipServiceTag": "DelivMethodSTD",
  "fieldNames": {
    "originTimeStamp": {
      "type": "number",
      "requiredOnCreate": false,
      "canUpdate": true,
      "validation": {
      },
      "optionalOnCreate": false
    },
    "relId": {
      "type": "string",
      "generatedField": true,
      "requiredOnCreate": false,
      "optionalOnCreate": false,
      "canUpdate": false,
      "validation": {
      }
    }
  },
  "storageResources": {
    "graph": {
      "storageType": "graph",
      "graphServerTag": "GraphHandler"
    }
  },
  "links": [
    {
      "storageResourceTags": [
        "graph"
      ],
      "from": {
        "objType": {
          "serviceTag": "DelivMethodSTD",
          "objectType": "deliveryMethodStandard"
        },
        "linkType": "one",
        "handler": true,
        "requiredOnCreate": false
      },
      "to": {
        "objType": {
          "serviceTag": "DeliveryMethodRAT",
          "objectType": "rateTable"
        },
        "linkType": "many",
        "requiredOnCreate": true,
        "handler": true
      },
      "canDelete": false
    }
  ],
  "canMove": false
}
</syntaxhighlight>
=== isDeliveryMethodStandardPropertyLabel ===
<syntaxhighlight lang="JavaScript">
{
  "relationshipServiceTag": "DelivMethodSTD",
  "fieldNames": {
    "relId": {
      "type": "string",
      "generatedField": true,
      "requiredOnCreate": false,
      "optionalOnCreate": false,
      "canUpdate": false,
      "validation": {
      }
    }
  },
  "storageResources": {
    "graph": {
      "storageType": "graph",
      "graphServerTag": "GraphHandler"
    }
  },
  "links": [
    {
      "storageResourceTags": [
        "graph"
      ],
      "from": {
        "objType": {
          "objectType": "deliveryMethodStandardPropertyValue",
          "serviceTag": "DelivMethodSTD"
        },
        "linkType": "many",
        "direction": "from",
        "requiredOnCreate": true,
        "handler": false
      },
      "to": {
        "objType": {
          "objectType": "deliveryMethodStandardPropertyLabel",
          "serviceTag": "DelivMethodSTD"
        },
        "linkType": "one",
        "direction": "to",
        "requiredOnCreate": false,
        "handler": false
      },
      "canDelete": false
    }
  ],
  "canMove": false
}
</syntaxhighlight>
=== hasDeliveryMethodStandardPropertyValue  ===
<syntaxhighlight lang="JavaScript">
{
  "relationshipServiceTag": "DelivMethodSTD",
  "fieldNames": {
    "relId": {
      "type": "string",
      "generatedField": true,
      "requiredOnCreate": false,
      "optionalOnCreate": false,
      "canUpdate": false,
      "validation": {
      }
    }
  },
  "storageResources": {
    "graph": {
      "storageType": "graph",
      "graphServerTag": "GraphHandler"
    }
  },
  "links": [
    {
      "storageResourceTags": [
        "graph"
      ],
      "from": {
        "objType": {
          "objectType": "deliveryMethodStandard",
          "serviceTag": "DelivMethodSTD"
        },
        "linkType": "one",
        "direction": "from",
        "requiredOnCreate": false,
        "handler": false
      },
      "to": {
        "objType": {
          "objectType": "deliveryMethodStandardPropertyValue",
          "serviceTag": "DelivMethodSTD"
        },
        "linkType": "many",
        "direction": "to",
        "requiredOnCreate": true,
        "handler": false
      },
      "canDelete": false
    }
  ],
canChangeToRelTypes: [
    {
      serviceTag:"deliveryMethodStandard",
      relationshipTag: "disabledDeliveryMethodStandardPropertyValue"
    },
  ],
  canMove:true
}
</syntaxhighlight>
=== hasDeliveryMethodRateTable ===
<syntaxhighlight lang="JavaScript">
{
  "relationshipServiceTag": "DelivMethodSTD",
  "fieldNames": {
    "originTimeStamp": {
      "type": "number",
      "requiredOnCreate": false,
      "canUpdate": true,
      "validation": {
      },
      "optionalOnCreate": false
    },
    "relId": {
      "type": "string",
      "generatedField": true,
      "requiredOnCreate": false,
      "optionalOnCreate": false,
      "canUpdate": false,
      "validation": {
      }
    }
  },
  "storageResources": {
    "graph": {
      "storageType": "graph",
      "graphServerTag": "GraphHandler"
    }
  },
  "links": [
    {
      "storageResourceTags": [
        "graph"
      ],
      "from": {
        "objType": {
          "serviceTag": "DelivMethodSTD",
          "objectType": "deliveryMethodStandard"
        },
        "linkType": "one",
        "handler": true,
        "requiredOnCreate": false
      },
      "to": {
        "objType": {
          "serviceTag": "DeliveryMethodRAT",
          "objectType": "rateTable"
        },
        "linkType": "many",
        "requiredOnCreate": true,
        "handler": true
      },
      "canDelete": false
    }
  ],
"canChangeToRelTypes": [
    {
      serviceTag:"deliveryMethodStandard",
      relationshipTag: "disabledDeliveryMethodRateTable"
    },
  ],
  "canMove": true
}
</syntaxhighlight>
=== disabledDeliveryMethodStandardPropertyValue ===
<syntaxhighlight lang="JavaScript">
{
  "relationshipServiceTag": "DelivMethodSTD",
  "fieldNames": {
    "relId": {
      "type": "string",
      "generatedField": true,
      "requiredOnCreate": false,
      "optionalOnCreate": false,
      "canUpdate": false,
      "validation": {
      }
    }
  },
  "storageResources": {
    "graph": {
      "storageType": "graph",
      "graphServerTag": "GraphHandler"
    }
  },
  "links": [
    {
      "storageResourceTags": [
        "graph"
      ],
      "from": {
        "objType": {
          "objectType": "deliveryMethodStandard",
          "serviceTag": "DelivMethodSTD"
        },
        "linkType": "one",
        "direction": "from",
        "requiredOnCreate": false,
        "handler": false
      },
      "to": {
        "objType": {
          "objectType": "deliveryMethodStandardPropertyValue",
          "serviceTag": "DelivMethodSTD"
        },
        "linkType": "many",
        "direction": "to",
        "requiredOnCreate": false,
        "handler": false
      },
      "canDelete": false
    }
  ],
  canChangeToRelTypes: [
    {
      serviceTag:"deliveryMethodStandard",
      relationshipTag: "hasDeliveryMethodStandardPropertyValue"
    },
  ],
  canMove:true
}
</syntaxhighlight>
=== disabledDeliveryMethodRateTable ===
<syntaxhighlight lang="JavaScript">
{
  "relationshipServiceTag": "DelivMethodSTD",
  "fieldNames": {
    "originTimeStamp": {
      "type": "number",
      "requiredOnCreate": false,
      "canUpdate": true,
      "validation": {
      },
      "optionalOnCreate": false
    },
    "relId": {
      "type": "string",
      "generatedField": true,
      "requiredOnCreate": false,
      "optionalOnCreate": false,
      "canUpdate": false,
      "validation": {
      }
    }
  },
  "storageResources": {
    "graph": {
      "storageType": "graph",
      "graphServerTag": "GraphHandler"
    }
  },
  "links": [
    {
      "storageResourceTags": [
        "graph"
      ],
      "from": {
        "objType": {
          "serviceTag": "DelivMethodSTD",
          "objectType": "deliveryMethodStandard"
        },
        "linkType": "one",
        "handler": true,
        "requiredOnCreate": false
      },
      "to": {
        "objType": {
          "serviceTag": "DeliveryMethodRAT",
          "objectType": "rateTable"
        },
        "linkType": "many",
        "handler": true,
        "requiredOnCreate": false
      },
      "canDelete": false
    }
  ],
  "canChangeToRelTypes": [
    {
      serviceTag:"deliveryMethodStandard",
      relationshipTag: "hasDeliveryMethodRateTable"
    },
  ],
  "canMove": true
}
</syntaxhighlight>


= DynamoDB tables =
= DynamoDB tables =
Line 42: Line 638:
configKey: "DeliveryMethodRateTableServiceName"
configKey: "DeliveryMethodRateTableServiceName"
configValue: xxx // eg: "DeliveryMethodRateTable"
configValue: xxx // eg: "DeliveryMethodRateTable"
}
</syntaxhighlight>
<syntaxhighlight lang="JavaScript">
{
configTag: "DeliveryMethodRbacServiceName"
configKey: "DeliveryMethodRbacServiceName"
configValue: xxx // eg: "Rbac"
}
}
</syntaxhighlight>
</syntaxhighlight>
Line 53: Line 657:
<syntaxhighlight lang="JavaScript">
<syntaxhighlight lang="JavaScript">
{
{
nodeLabel: "{DeliveryMethodStandardLib.DELIVERYMETHOD_GRAPH_NODE_LABEL}", // "deliveryMethod"
nodeLabel: "{deliveryMethodSharedLib.consts.DELIVERYMETHOD_GRAPH_NODE_LABEL}",
schema: {
identifier: true,
restrictProperties: true,
restrictRelationships: true,
properties: {
deliveryMethodId: {
identifier: true, // create unique id from translation
},
deliveryMethodHandlerServiceNameTag: {
immutable: true,
},
defaultValueType: {},
defaultValueId: {},
},
}
}
}
</syntaxhighlight>
</syntaxhighlight>
Line 81: Line 670:
</syntaxhighlight>
</syntaxhighlight>
* see [[NPM module - Izara Core - Property Node|DataSchemaLib]]
* see [[NPM module - Izara Core - Property Node|DataSchemaLib]]
=== Versioned data ===
==== deliveryMethodSettings ====
<syntaxhighlight lang="JavaScript">
{
properties: {
defaultValueType: {}, // orderQuantity|orderSubtotal|productAttributeId|sellOfferTermId
defaultValueId: {}, //(optinalOnCreate) used for productAttributeId|sellOfferTermId
defaultValueLanguageId: {}, // (optinalOnCreate) used for productAttributeId|sellOfferTermId, when finding attribute value need to set language to find
defaultAccumulateValue: true //(optinalOnCreate) default: true, if set to false will find the largest value out of all sellOffers in the order
},
}
</syntaxhighlight>


=== Relationships ===
=== Relationships ===
Line 97: Line 701:
}
}
</syntaxhighlight>
</syntaxhighlight>
* currently this is set when creating the deliveryMethod and cannot be changed, if in future we allow to be changed, will need to validate all sellOffers that link to this deliveryMethod and ensure sellOffer's stock location still slots into the deliveryMethods new from_LocationNode
<syntaxhighlight lang="JavaScript">
<syntaxhighlight lang="JavaScript">
{
{
Line 151: Line 757:
* see [[NPM module - Izara Core - Property Node|DataSchemaLib]]
* see [[NPM module - Izara Core - Property Node|DataSchemaLib]]


== Basic node schemas ==
= Complex Filter requests =


<syntaxhighlight lang="JavaScript">
<syntaxhighlight lang="JavaScript">
{
{
nodeLabel: "{DeliveryMethodStandardLib.DELIVERYMETHOD_GRAPH_NODE_LABEL}"
filterType: "handlerDeliveryMethod" //unique id is deliveryMethodId
schema: {
type: "group",
identifier: true,
elements:
restrictProperties: true,
[
restrictRelationships: true,
{
properties: {
type: "logical",
deliveryMethodId: {
logicalTag: "currencyId",
identifier: true,
comparison: "equals",
},
value: "xx"
deliveryMethodHandlerServiceNameTag: {
},
immutable: true,
{
},
type: "logical",
logicalTag: "fromLocationNodeId",
comparison: "equals",
value: "xx"
},
{
type: "complexFilter",
complexFilter: {
filterType: "deliveryMethodRateTable",
// see [[Service - Delivery Method Rate Table|Complex Filter requests]]
}
},
{
type: "complexFilter",
complexFilter: {
filterType: "deliveryMethodProperty",
// see [[NPM module - Izara Core - Property Node|Complex Filter requests]]
}
},
},
}
{
type: "complexFilter",
complexFilter: {
filterType: "deliveryMethodNameTranslation" //unique id is deliveryMethodId
type: "group",
elements:
[
{
// see [[Service - Translations|Complex Filter requests]]
type: "logical",
logicalTag: "textTag_languageId_text",
resultType: "deliveryMethod",
textTag: "deliveryMethodName",
languageId: "en",
text: "Is a great term",
subjectIdentifierPropertyName: "deliveryMethodId",
caseSensitive: true
},
]
}
},
...
]
}
}
</syntaxhighlight>
</syntaxhighlight>
* [[Service - Translations Graph]]
* [[Service - Orders Graph]]


Schema comes from [[NPM module - Izara Core - Property Node|BasicNodeSchemaLib]]
== Translate Ids - deliveryMethodRateTable to deliveryMethod ==


# deliveryMethodPropertyLabel
* only find deliveryMethodIds that are enabled
#* [[Service - Translations Graph]]
# deliveryMethodProperty
#* [[Service - Translations Graph]]


= Data structure notes =
= Data structure notes =

Latest revision as of 06:27, 24 November 2025

Overview

Handler service for basic delivery methods that use Service - Delivery Method Rate Table for pricing.

Repository

https://bitbucket.org/izara-market-products/izara-market-products-delivery-method-standard

Schemas

ObjectSchemas

extendObjType:deliveryMethod

deliveryMethodStandard

{
  "objectType": "deliveryMethodStandard",
  "extendObjType": {
    "serviceTag": "DeliveryMethodMgr",
    "objectType": "deliveryMethod"
  },
  "storageResources": {
    "graph": {
      "storageType": "graph",
      "graphServerTag": "GraphHandler"
    },
    "dynamoDB": {
      "storageType": "dynamoDB",
      "tableName": "DeliveryMethodRecord",
      "serviceTag": "DeliveryMethodMgr"
    }
  },
  "addOnDataStructure": [
    {
      "type": "versionedData",
      "versionedDataLabel": "deliveryMethodSettings",
      "storageResourceTag": "graph",
      "fieldNames": {
        "defaultValueType": {
          "type": "string",
          "requiredOnCreate": true,
          "optionalOnCreate": false,
          "canUpdate": true,
          "validation": {
            "pattern": "^[a-zA-Z0-9_-]+$"
          }
        },
        "defaultValueId": {
          "type": "string",
          "requiredOnCreate": true,
          "optionalOnCreate": false,
          "canUpdate": true,
          "validation": {
            "pattern": "^[a-zA-Z0-9_-]+$"
          }
        },
        "defaultValueLanguageId": {
          "type": "string",
          "requiredOnCreate": true,
          "optionalOnCreate": false,
          "canUpdate": true,
          "validation": {
            "pattern": "^[a-zA-Z0-9_-]+$"
          }
        },
        "defaultAccumulateValue": {
          "type": "boolean",
          "requiredOnCreate": true,
          "optionalOnCreate": false,
          "canUpdate": true,
          "validation": {

          }
        }
      }
    },
    {
      "type": "propertyValue"
    }
  ],
  "fieldNames": {},
  "generatedBy": "userGenerated"
}


  • Property

deliveryMethodStandardPropertyLabel

{
  "objectType": "deliveryMethodStandardPropertyLabel",
  "addOnDataStructure": [
    {
      "type": "translation"
    }
  ],
  "canDelete": true,
  "storageResources": {
    "graph": {
      "storageType": "graph",
      "graphServerTag": "GraphHandler"
    }
  },
  "fieldNames": {
    "deliveryMethodStandardPropertyLabelId": {
      "type": "string",
      "requiredOnCreate": false,
      "optionalOnCreate": false,
      "canUpdate": false,
      "randomOnCreate": true,
      "validation": {
        "pattern": "^[a-zA-Z0-9-_]+$"
      },
      "storageResourceTags": [
        "graph"
      ]
    }
  },
  "identifiers": [
    {
      "type": "identifier",
      "fieldName": "deliveryMethodStandardPropertyLabelId"
    }
  ],
  "generatedBy": "userGenerated"
}


deliveryMethodStandardPropertyValue

{
  "objectType": "deliveryMethodStandardPropertyValue",
  "addOnDataStructure": [
    {
      "type": "translation"
    }
  ],
  "canDelete": true,
  "storageResources": {
    "graph": {
      "storageType": "graph",
      "graphServerTag": "GraphHandler"
    }
  },
  "fieldNames": {
    "deliveryMethodStandardPropertyValueId": {
      "type": "string",
      "requiredOnCreate": false,
      "optionalOnCreate": false,
      "canUpdate": false,
      "randomOnCreate": true,
      "validation": {
        "pattern": "^[a-zA-Z0-9-_]+$"
      },
      "storageResourceTags": [
        "graph"
      ]
    }
  },
  "identifiers": [
    {
      "type": "identifier",
      "fieldName": "deliveryMethodStandardPropertyValueId"
    }
  ],
  "generatedBy": "userGenerated"
}

relationshipSchemas

  • RelationshipTags

fromLocationNode

{
  "relationshipServiceTag": "DelivMethodSTD",
  "fieldNames": {
    "originTimeStamp": {
      "type": "number",
      "requiredOnCreate": false,
      "canUpdate": true,
      "validation": {

      },
      "optionalOnCreate": true
    },
    "relId": {
      "type": "string",
      "generatedField": true,
      "requiredOnCreate": false,
      "optionalOnCreate": false,
      "canUpdate": false,
      "validation": {

      }
    }
  },
  "storageResources": {
    "graph": {
      "storageType": "graph",
      "graphServerTag": "GraphHandler"
    }
  },
  "links": [
    {
      "storageResourceTags": [
        "graph"
      ],
      "from": {
        "objType": {
          "serviceTag": "Locations",
          "objectType": "locationNode"
        },
        "linkType": "one",
        "handler": true,
        "requiredOnCreate": false
      },
      "to": {
        "objType": {
          "serviceTag": "DelivMethodSTD",
          "objectType": "deliveryMethodStandard"
        },
        "linkType": "many",
        "requiredOnCreate": true,
        "handler": true
      },
      "canDelete": false
    }
  ],
  "canMove": false
}

ownsDeliveryMethodRateTable

{
  "relationshipServiceTag": "DelivMethodSTD",
  "fieldNames": {
    "originTimeStamp": {
      "type": "number",
      "requiredOnCreate": false,
      "canUpdate": true,
      "validation": {

      },
      "optionalOnCreate": false
    },
    "relId": {
      "type": "string",
      "generatedField": true,
      "requiredOnCreate": false,
      "optionalOnCreate": false,
      "canUpdate": false,
      "validation": {

      }
    }
  },
  "storageResources": {
    "graph": {
      "storageType": "graph",
      "graphServerTag": "GraphHandler"
    }
  },
  "links": [
    {
      "storageResourceTags": [
        "graph"
      ],
      "from": {
        "objType": {
          "serviceTag": "DelivMethodSTD",
          "objectType": "deliveryMethodStandard"
        },
        "linkType": "one",
        "handler": true,
        "requiredOnCreate": false
      },
      "to": {
        "objType": {
          "serviceTag": "DeliveryMethodRAT",
          "objectType": "rateTable"
        },
        "linkType": "many",
        "requiredOnCreate": true,
        "handler": true
      },
      "canDelete": false
    }
  ],
  "canMove": false
}


isDeliveryMethodStandardPropertyLabel

{
  "relationshipServiceTag": "DelivMethodSTD",
  "fieldNames": {
    "relId": {
      "type": "string",
      "generatedField": true,
      "requiredOnCreate": false,
      "optionalOnCreate": false,
      "canUpdate": false,
      "validation": {

      }
    }
  },
  "storageResources": {
    "graph": {
      "storageType": "graph",
      "graphServerTag": "GraphHandler"
    }
  },
  "links": [
    {
      "storageResourceTags": [
        "graph"
      ],
      "from": {
        "objType": {
          "objectType": "deliveryMethodStandardPropertyValue",
          "serviceTag": "DelivMethodSTD"
        },
        "linkType": "many",
        "direction": "from",
        "requiredOnCreate": true,
        "handler": false
      },
      "to": {
        "objType": {
          "objectType": "deliveryMethodStandardPropertyLabel",
          "serviceTag": "DelivMethodSTD"
        },
        "linkType": "one",
        "direction": "to",
        "requiredOnCreate": false,
        "handler": false
      },
      "canDelete": false
    }
  ],
  "canMove": false
}


hasDeliveryMethodStandardPropertyValue

{
  "relationshipServiceTag": "DelivMethodSTD",
  "fieldNames": {
    "relId": {
      "type": "string",
      "generatedField": true,
      "requiredOnCreate": false,
      "optionalOnCreate": false,
      "canUpdate": false,
      "validation": {

      }
    }
  },
  "storageResources": {
    "graph": {
      "storageType": "graph",
      "graphServerTag": "GraphHandler"
    }
  },
  "links": [
    {
      "storageResourceTags": [
        "graph"
      ],
      "from": {
        "objType": {
          "objectType": "deliveryMethodStandard",
          "serviceTag": "DelivMethodSTD"
        },
        "linkType": "one",
        "direction": "from",
        "requiredOnCreate": false,
        "handler": false
      },
      "to": {
        "objType": {
          "objectType": "deliveryMethodStandardPropertyValue",
          "serviceTag": "DelivMethodSTD"
        },
        "linkType": "many",
        "direction": "to",
        "requiredOnCreate": true,
        "handler": false
      },
      "canDelete": false
    }
  ],
 canChangeToRelTypes: [
    {
      serviceTag:"deliveryMethodStandard",
      relationshipTag: "disabledDeliveryMethodStandardPropertyValue"
    },
   ],
  canMove:true
}

hasDeliveryMethodRateTable

{
  "relationshipServiceTag": "DelivMethodSTD",
  "fieldNames": {
    "originTimeStamp": {
      "type": "number",
      "requiredOnCreate": false,
      "canUpdate": true,
      "validation": {

      },
      "optionalOnCreate": false
    },
    "relId": {
      "type": "string",
      "generatedField": true,
      "requiredOnCreate": false,
      "optionalOnCreate": false,
      "canUpdate": false,
      "validation": {

      }
    }
  },
  "storageResources": {
    "graph": {
      "storageType": "graph",
      "graphServerTag": "GraphHandler"
    }
  },
  "links": [
    {
      "storageResourceTags": [
        "graph"
      ],
      "from": {
        "objType": {
          "serviceTag": "DelivMethodSTD",
          "objectType": "deliveryMethodStandard"
        },
        "linkType": "one",
        "handler": true,
        "requiredOnCreate": false
      },
      "to": {
        "objType": {
          "serviceTag": "DeliveryMethodRAT",
          "objectType": "rateTable"
        },
        "linkType": "many",
        "requiredOnCreate": true,
        "handler": true
      },
      "canDelete": false
    }
  ],
 "canChangeToRelTypes": [
    {
      serviceTag:"deliveryMethodStandard",
      relationshipTag: "disabledDeliveryMethodRateTable"
    },
   ],
  "canMove": true
}

disabledDeliveryMethodStandardPropertyValue

{
  "relationshipServiceTag": "DelivMethodSTD",
  "fieldNames": {
    "relId": {
      "type": "string",
      "generatedField": true,
      "requiredOnCreate": false,
      "optionalOnCreate": false,
      "canUpdate": false,
      "validation": {

      }
    }
  },
  "storageResources": {
    "graph": {
      "storageType": "graph",
      "graphServerTag": "GraphHandler"
    }
  },
  "links": [
    {
      "storageResourceTags": [
        "graph"
      ],
      "from": {
        "objType": {
          "objectType": "deliveryMethodStandard",
          "serviceTag": "DelivMethodSTD"
        },
        "linkType": "one",
        "direction": "from",
        "requiredOnCreate": false,
        "handler": false
      },
      "to": {
        "objType": {
          "objectType": "deliveryMethodStandardPropertyValue",
          "serviceTag": "DelivMethodSTD"
        },
        "linkType": "many",
        "direction": "to",
        "requiredOnCreate": false,
        "handler": false
      },
      "canDelete": false
    }
  ],
  canChangeToRelTypes: [
    {
      serviceTag:"deliveryMethodStandard",
      relationshipTag: "hasDeliveryMethodStandardPropertyValue"
    },
   ],
  canMove:true
}

disabledDeliveryMethodRateTable

{
  "relationshipServiceTag": "DelivMethodSTD",
  "fieldNames": {
    "originTimeStamp": {
      "type": "number",
      "requiredOnCreate": false,
      "canUpdate": true,
      "validation": {

      },
      "optionalOnCreate": false
    },
    "relId": {
      "type": "string",
      "generatedField": true,
      "requiredOnCreate": false,
      "optionalOnCreate": false,
      "canUpdate": false,
      "validation": {

      }
    }
  },
  "storageResources": {
    "graph": {
      "storageType": "graph",
      "graphServerTag": "GraphHandler"
    }
  },
  "links": [
    {
      "storageResourceTags": [
        "graph"
      ],
      "from": {
        "objType": {
          "serviceTag": "DelivMethodSTD",
          "objectType": "deliveryMethodStandard"
        },
        "linkType": "one",
        "handler": true,
        "requiredOnCreate": false
      },
      "to": {
        "objType": {
          "serviceTag": "DeliveryMethodRAT",
          "objectType": "rateTable"
        },
        "linkType": "many",
        "handler": true,
        "requiredOnCreate": false
      },
      "canDelete": false
    }
  ],
  "canChangeToRelTypes": [
    {
      serviceTag:"deliveryMethodStandard",
      relationshipTag: "hasDeliveryMethodRateTable"
    },
   ],
  "canMove": true
}

DynamoDB tables

Standard Config Table Per Service

Configuration tags

{
	configTag: "DeliveryMethodHandlerServiceNameTag"
	configKey: "DeliveryMethodHandlerServiceNameTag"
	configValue: xxx // this own services ServiceNameTag, eg "DeliveryMethodStandard"
}
{
	configTag: "ProductGraphServiceName"
	configKey: "ProductGraphServiceName"
	configValue: xxx // eg: "ProductGraph"
}
{
	configTag: "DeliveryMethodManagerServiceName"
	configKey: "DeliveryMethodManagerServiceName"
	configValue: xxx // eg: "DeliveryMethodManager"
}
{
	configTag: "DeliveryMethodRateTableServiceName"
	configKey: "DeliveryMethodRateTableServiceName"
	configValue: xxx // eg: "DeliveryMethodRateTable"
}
{
	configTag: "DeliveryMethodRbacServiceName"
	configKey: "DeliveryMethodRbacServiceName"
	configValue: xxx // eg: "Rbac"
}

Graph database

Service - Products Graph

Nodes

{
	nodeLabel: "{deliveryMethodSharedLib.consts.DELIVERYMETHOD_GRAPH_NODE_LABEL}",
}
{
	nodeLabel: "{DeliveryMethodStandardLib.DELIVERYMETHOD_GRAPH_NODE_LABEL}PropertyLabel",
}
{
	nodeLabel: "{DeliveryMethodStandardLib.DELIVERYMETHOD_GRAPH_NODE_LABEL}Property",
}

Versioned data

deliveryMethodSettings

{
	properties: {
		defaultValueType: {}, // orderQuantity|orderSubtotal|productAttributeId|sellOfferTermId
		defaultValueId: {}, //(optinalOnCreate) used for productAttributeId|sellOfferTermId
		defaultValueLanguageId: {}, // (optinalOnCreate) used for productAttributeId|sellOfferTermId, when finding attribute value need to set language to find
		defaultAccumulateValue: true //(optinalOnCreate) default: true, if set to false will find the largest value out of all sellOffers in the order
	},
}

Relationships

{
	relationshipType: "{DeliveryMethodStandardLib.createfromLocationNodeRelationshipType()}", // "from_LocationNode"
	schema: {
		elementCanBeRemoved: false,
		allPropertiesImmutable: true,
		restrictProperties: true,
		properties: {
			originTimestamp: //timestamp the request to create/change this relationship was sent
		},
	}
}
  • currently this is set when creating the deliveryMethod and cannot be changed, if in future we allow to be changed, will need to validate all sellOffers that link to this deliveryMethod and ensure sellOffer's stock location still slots into the deliveryMethods new from_LocationNode
{
	relationshipType: "{DeliveryMethodStandardLib.createHasDeliveryMethodRateTableGraphRelationshipType()}", // "has_deliveryMethodRateTable"
	schema: {
		elementCanBeRemoved: true,
		allPropertiesImmutable: true,
		restrictProperties: true,
		properties: {
			originTimestamp: //timestamp the request to create/change this relationship was sent
		},
	}
}
{
	relationshipType: "{DeliveryMethodStandardLib.createDisabledDeliveryMethodRateTableGraphRelationshipType()}", // "disabled_deliveryMethodRateTable"
	schema: {
		elementCanBeRemoved: true,
		allPropertiesImmutable: true,
		restrictProperties: true,
		properties: {
			originTimestamp: //timestamp the request to create/change this relationship was sent
		},
	}
}
{
	relationshipType: "{DeliveryMethodStandardLib.createHasDeliveryMethodRateTableGraphRelationshipType()}", // "owns_deliveryMethodRateTable"
	schema: {
		elementCanBeRemoved: true,
		allPropertiesImmutable: true,
		restrictProperties: true,
		properties: {
			originTimestamp: //timestamp the request to create/change this relationship was sent
		},
	}
}
  • controls ownership of a rateTable, many deliveryMethods can point to one rateTable but only one deliveryMethod controls it (RBAC for that deliveryMethods allows control over the rateTable)
{
	relationshipType: "has_{DeliveryMethodStandardLib.DELIVERYMETHOD_GRAPH_NODE_LABEL}Property",
}
{
	relationshipType: "disabled_{DeliveryMethodStandardLib.DELIVERYMETHOD_GRAPH_NODE_LABEL}Property",
}
{
	relationshipType: "is_{DeliveryMethodStandardLib.DELIVERYMETHOD_GRAPH_NODE_LABEL}PropertyLabel",
}

Complex Filter requests

{
	filterType: "handlerDeliveryMethod" //unique id is deliveryMethodId
	type: "group",
	elements:
	[
		{
			type: "logical",
			logicalTag: "currencyId",
			comparison: "equals",
			value: "xx"
		},
		{
			type: "logical",
			logicalTag: "fromLocationNodeId",
			comparison: "equals",
			value: "xx"
		},
		{
			type: "complexFilter",
			complexFilter: {
				filterType: "deliveryMethodRateTable",
				// see [[Service - Delivery Method Rate Table|Complex Filter requests]]
			}
		},
		{
			type: "complexFilter",
			complexFilter: {
				filterType: "deliveryMethodProperty",
				// see [[NPM module - Izara Core - Property Node|Complex Filter requests]]
			}
		},
		{
			type: "complexFilter",
			complexFilter: {
				filterType: "deliveryMethodNameTranslation" //unique id is deliveryMethodId
				type: "group",
				elements: 
				[
					{
						// see [[Service - Translations|Complex Filter requests]]
						type: "logical",
						logicalTag: "textTag_languageId_text",
						resultType: "deliveryMethod",
						textTag: "deliveryMethodName",
						languageId: "en",
						text: "Is a great term",
						subjectIdentifierPropertyName: "deliveryMethodId",
						caseSensitive: true
					},
				]
			}
		},		
		...
	]
}

Translate Ids - deliveryMethodRateTable to deliveryMethod

  • only find deliveryMethodIds that are enabled

Data structure notes

  • Users can create new deliveryMethods which are uniquely identified by their translation
  • deliveryMethods have RBAC structure, default to creator having admin permissions, but admin can add other roles etc..
  • Any user can attach any deliveryMethod to a SellOfferPlan

Working documents

Delivery Method Standard