<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://izara.io/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jammy</id>
	<title>Izara Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://izara.io/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jammy"/>
	<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php/Special:Contributions/Jammy"/>
	<updated>2026-05-02T00:35:56Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-02-26_-_ImportData_CsvImportConfig&amp;diff=4120</id>
		<title>2026-02-26 - ImportData CsvImportConfig</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-02-26_-_ImportData_CsvImportConfig&amp;diff=4120"/>
		<updated>2026-02-27T08:46:19Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CsvImportConfig =&lt;br /&gt;
== CsvImportConfig ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;csvImportConfigId&amp;quot;: &amp;quot;xxxxx&amp;quot;,&lt;br /&gt;
    &amp;quot;recordDeliminator&amp;quot;: &amp;quot;\n&amp;quot;,&lt;br /&gt;
    &amp;quot;useUserReference&amp;quot;: true,&lt;br /&gt;
    &amp;quot;fieldDeliminator&amp;quot;: &amp;quot;,&amp;quot;,&lt;br /&gt;
    &amp;quot;escapeString&amp;quot;: &amp;quot;\\&amp;quot;,&lt;br /&gt;
    &amp;quot;removeFloatingEscapeString&amp;quot;: true,&lt;br /&gt;
    &amp;quot;removeWhiteSpace&amp;quot;: true,&lt;br /&gt;
    &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
      &amp;quot;titleRow&amp;quot;: 1,&lt;br /&gt;
      &amp;quot;titleRowOpenEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;titleRowCloseEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;replacefieldNames&amp;quot;: {}&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;ignoreRows&amp;quot;: [4,5],&lt;br /&gt;
    &amp;quot;overwriteColumnName&amp;quot;: {&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;{replaceToValue}&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;objectTypes&amp;quot;: [],&lt;br /&gt;
    &amp;quot;floatingRelationships&amp;quot;: []&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*csvImportConfigId (required) = The ID of the CsvImportConfig&lt;br /&gt;
&lt;br /&gt;
*recordDelimiter (required) = The row delimiter&lt;br /&gt;
&lt;br /&gt;
*fieldDelimiter (required) = The column delimiter&lt;br /&gt;
&lt;br /&gt;
*escapeString (required) = The character used to escape delimiters (e.g., &amp;quot; to indicate that this is a quotation mark, not a column delimiter)&lt;br /&gt;
&lt;br /&gt;
*removeFloatingEscapeString (required) = Remove any standalone (floating) escape characters&lt;br /&gt;
&lt;br /&gt;
*removeWhiteSpace (required) = Remove whitespace within the column&lt;br /&gt;
&lt;br /&gt;
*titleRow (required) = Specify which row (x) of the CSV is the header row&lt;br /&gt;
&lt;br /&gt;
*ignoreRows (required) = Ignore the specified rows&lt;br /&gt;
&lt;br /&gt;
==objectTypes==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;objectTypes&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;setObjectTypeFieldNames&amp;quot;: {},&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Translations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;translationLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;searchPattern&amp;quot;: &amp;quot;^translationLink.*:&amp;quot;,&lt;br /&gt;
        &amp;quot;instancePattern&amp;quot;: &amp;quot;(?&amp;lt;=translationLink)(.*)(?=:)&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldNamePatterns&amp;quot;: [&lt;br /&gt;
          {&lt;br /&gt;
            &amp;quot;fieldNamePattern&amp;quot;: &amp;quot;(?&amp;lt;=:translationLink-A)&amp;quot;,&lt;br /&gt;
            &amp;quot;fieldName&amp;quot;: &amp;quot;translationLink&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldNameSearchPattern&amp;quot;: &amp;quot;(?&amp;lt;=:)(.*)&amp;quot;,&lt;br /&gt;
        &amp;quot;referenceFieldNames&amp;quot;: [&lt;br /&gt;
          &amp;quot;userRef&amp;quot;,&lt;br /&gt;
          &amp;quot;ref&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;referenceLinks&amp;quot;: {&lt;br /&gt;
          &amp;quot;linkTagetToTL&amp;quot;: {&lt;br /&gt;
            &amp;quot;relType&amp;quot;: {&lt;br /&gt;
              &amp;quot;serviceTag&amp;quot;: &amp;quot;Translation&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasTranslationLink&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;defaultActionField&amp;quot;: &amp;quot;create&amp;quot;,&lt;br /&gt;
        &amp;quot;actionField&amp;quot;: {&lt;br /&gt;
          &amp;quot;fieldName&amp;quot;: &amp;quot;actionField&amp;quot;,&lt;br /&gt;
          &amp;quot;createValue&amp;quot;: &amp;quot;c&amp;quot;,&lt;br /&gt;
          &amp;quot;updateValue&amp;quot;: &amp;quot;u&amp;quot;,&lt;br /&gt;
          &amp;quot;referenceValue&amp;quot;: &amp;quot;r&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;defaultEnclose&amp;quot;: {&lt;br /&gt;
          &amp;quot;openEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;,&lt;br /&gt;
          &amp;quot;closeEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;enclose&amp;quot;: [&lt;br /&gt;
          {&lt;br /&gt;
            &amp;quot;openEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;closeEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;alwaysEnclose&amp;quot;: &amp;quot;always&amp;quot;,&lt;br /&gt;
            &amp;quot;fieldNames&amp;quot;: [&lt;br /&gt;
              &amp;quot;weight&amp;quot;,&lt;br /&gt;
              &amp;quot;textTag&amp;quot;,&lt;br /&gt;
              &amp;quot;languageId&amp;quot;,&lt;br /&gt;
              &amp;quot;userRef&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
          }&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;emptyDataFieldNames&amp;quot;: [],&lt;br /&gt;
        &amp;quot;overwriteValues&amp;quot;: {}&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*setObjectTypeFieldNames (optional) = Specify the objType for each instancePattern (used when the same searchPattern is shared but the instancePattern differs). For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;setObjectTypeFieldNames&amp;quot;: {&lt;br /&gt;
         &amp;quot;subObjectTypeX&amp;quot;: {&lt;br /&gt;
           &amp;quot;serviceDeliverySTD1&amp;quot;: {&lt;br /&gt;
             &amp;quot;serviceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;,&lt;br /&gt;
             &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethod&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;rateTable001&amp;quot;: {&lt;br /&gt;
             &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
             &amp;quot;objectType&amp;quot;: &amp;quot;rates&amp;quot;&lt;br /&gt;
           }&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! deliveryDELIVERYSTD:actionField !! deliveryDELIVERYSTD:subObjectTypeX !! deliveryRATETABLE:actionField !! deliveryRATETABLE:subObjectTypeX&lt;br /&gt;
|-&lt;br /&gt;
| c || serviceDeliverySTD1 || c || rateTable001&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
By defining &amp;quot;searchPattern&amp;quot;: &amp;quot;^delivery.*:&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
the instancePattern is DELIVERYSTD, the objType will be set accordingly&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;,&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethod&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
the instancePattern is RATETABLE, the objType will be set accordingly.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;rates&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*searchPattern (required) = The system will look for column names that start with the value of searchPattern, followed by :&lt;br /&gt;
&lt;br /&gt;
*referenceLinks (optional) = Used in the case of a ReferenceLink to specify the targetObject and which Relationship to use&lt;br /&gt;
&lt;br /&gt;
*instancePattern (required) = Extract the Instance name (e.g., if searchPattern = translationLink, then translationLinkA will extract A as the Instance)&lt;br /&gt;
&lt;br /&gt;
*referenceFieldNames (required) = The fields used as references&lt;br /&gt;
&lt;br /&gt;
*actionField (required) = Define the action abbreviation in the CSV (e.g., c = create, u = update, r = reference)&lt;br /&gt;
&lt;br /&gt;
*defaultActionField (optional) = If no Action is specified, the system will use the Action defined here&lt;br /&gt;
&lt;br /&gt;
*enclose (required) = The fields specified in fieldNames must be enclosed&lt;br /&gt;
&lt;br /&gt;
*defaultEnclose (required) = Fields not specified in enclose will use the defaultEnclose value&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Feed CSV=&lt;br /&gt;
When creating a CSV, the fieldName values will be defined according to the schemas of the object to be created, and referenceFieldNames will always be included as well. For example, when creating a rate.&lt;br /&gt;
&lt;br /&gt;
rate have a fieldNames&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;rates&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: false,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;ratesId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
          &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;,&lt;br /&gt;
          &amp;quot;minLength&amp;quot;: 1&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;upToValue&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {},&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;rate&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {},&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;ratesId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By specifying it in the CsvImportConfig as follows.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;searchPattern&amp;quot;: &amp;quot;^DeliverRate.*:&amp;quot;,&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot; |  &lt;br /&gt;
! DeliverRate:actionField !! DeliverRate:ratesId !! DeliverRate:upToValue !! DeliverRate:rate !! DeliverRate:userRef&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 1 ||  ||  || 100 || 10 || rate001&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 2 ||  || rate1234567 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 3 ||  || rate1234567 || 50 || 5 || &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 4 || d || rate1234567 ||  ||  || rate001&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
1.Create case: Send the fieldNames defined in the Schemas along with the referenceFieldNames (excluding fieldNames that are identifiers).&lt;br /&gt;
&lt;br /&gt;
2.Get case: Send only the fieldNames that are identifiers.&lt;br /&gt;
&lt;br /&gt;
3.Update case: Send all fieldNames defined in the Schemas (fieldNames must have canUpdate set to true).&lt;br /&gt;
&lt;br /&gt;
4.Delete case: Send the fieldNames that are identifiers along with the referenceFieldNames.&lt;br /&gt;
&lt;br /&gt;
=FloatingRelationShip=&lt;br /&gt;
Handling Feed and CsvImportConfig in the case of FloatingRelationship&lt;br /&gt;
&lt;br /&gt;
CsvImportConfig will additionally include:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;floatingRelationships&amp;quot;: [ &lt;br /&gt;
     {&lt;br /&gt;
       &amp;quot;setRelationshipTagFieldNames&amp;quot;: {&lt;br /&gt;
         &amp;quot;setRelationshipA&amp;quot;: {&lt;br /&gt;
           &amp;quot;isLocationType&amp;quot;: {&lt;br /&gt;
             &amp;quot;relType&amp;quot;: {&lt;br /&gt;
               &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
               &amp;quot;relationshipTag&amp;quot;: &amp;quot;isLocationType&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;hasTranslationLink&amp;quot;: {&lt;br /&gt;
             &amp;quot;relType&amp;quot;: {&lt;br /&gt;
               &amp;quot;serviceTag&amp;quot;: &amp;quot;Translations&amp;quot;,&lt;br /&gt;
               &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasTranslationLink&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
           }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
       &amp;quot;relationshipTag&amp;quot;: {&lt;br /&gt;
         &amp;quot;relType&amp;quot;: {&lt;br /&gt;
           &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
           &amp;quot;relationshipTag&amp;quot;: &amp;quot;isLocationType&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;&lt;br /&gt;
       },&lt;br /&gt;
       &amp;quot;searchPattern&amp;quot;: &amp;quot;^RELATIONSHIP.*:&amp;quot;,&lt;br /&gt;
       &amp;quot;instancePattern&amp;quot;: &amp;quot;(?&amp;lt;=RELATIONSHIP)(.*)(?=:)&amp;quot;,&lt;br /&gt;
       &amp;quot;relationshipPropertyPatterns&amp;quot;: [&lt;br /&gt;
         {&lt;br /&gt;
           &amp;quot;relationshipPropertyPattern&amp;quot;: &amp;quot;originTimestamp&amp;quot;,&lt;br /&gt;
           &amp;quot;relationshipProperty&amp;quot;: {&lt;br /&gt;
             &amp;quot;settings&amp;quot;: {&lt;br /&gt;
               &amp;quot;encoding&amp;quot;: &amp;quot;Number&amp;quot;&lt;br /&gt;
             }&lt;br /&gt;
           }&lt;br /&gt;
         }&lt;br /&gt;
       ],&lt;br /&gt;
       &amp;quot;relationshipPropertySearchPattern&amp;quot;: &amp;quot;(?&amp;lt;=:)(.*)&amp;quot;,&lt;br /&gt;
       &amp;quot;objectAReferenceLinks&amp;quot;: [&lt;br /&gt;
         &amp;quot;objectAReference&amp;quot;&lt;br /&gt;
       ],&lt;br /&gt;
       &amp;quot;objectBReferenceLinks&amp;quot;: [&lt;br /&gt;
         &amp;quot;objectBReference&amp;quot;&lt;br /&gt;
       ],&lt;br /&gt;
       &amp;quot;actionRelationship&amp;quot;: {&lt;br /&gt;
         &amp;quot;fieldName&amp;quot;: &amp;quot;actionRelationship&amp;quot;,&lt;br /&gt;
         &amp;quot;createValue&amp;quot;: &amp;quot;c&amp;quot;,&lt;br /&gt;
         &amp;quot;deleteValue&amp;quot;: &amp;quot;d&amp;quot;,&lt;br /&gt;
         &amp;quot;updateValue&amp;quot;: &amp;quot;u&amp;quot;&lt;br /&gt;
       },&lt;br /&gt;
       &amp;quot;relIdPatterns&amp;quot;: [&lt;br /&gt;
         &amp;quot;relId&amp;quot;&lt;br /&gt;
       ],&lt;br /&gt;
       &amp;quot;enclose&amp;quot;: [&lt;br /&gt;
         {&lt;br /&gt;
           &amp;quot;openEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;,&lt;br /&gt;
           &amp;quot;closeEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;,&lt;br /&gt;
           &amp;quot;alwaysEnclose&amp;quot;: &amp;quot;always&amp;quot;,&lt;br /&gt;
           &amp;quot;fieldNames&amp;quot;: []&lt;br /&gt;
         }&lt;br /&gt;
       ]&lt;br /&gt;
     }&lt;br /&gt;
   ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*setRelationshipTagFieldNames (required) = Defines how Relationships are selected for linking (if the header specifies setRelationshipA, only the values defined in setRelationshipA within the CsvImportConfig can be used).&lt;br /&gt;
&lt;br /&gt;
*relationshipTag (required) = If the specified Relationship value is not provided, the value defined here will be used as the default Relationship.&lt;br /&gt;
&lt;br /&gt;
*objectAReferenceLinks / objectBReferenceLinks (required) = Used to specify the source object and the target object (these values must match the referenceFieldNames of the corresponding objectTypes).&lt;br /&gt;
&lt;br /&gt;
*relIdPatterns (required) = The values defined here will be treated as the identifiers of the Relationships.&lt;br /&gt;
&lt;br /&gt;
Handling Feed for FloatingRelationships&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! locatiosType:locatiosTypeId !! locatiosType:uesrRef !! locatiosNode:userRef !! Relationship:setRelationshipA !! Relationship:objectAReference !! Relationship:objectBReference !! Relationship:actionRelationship &lt;br /&gt;
|-&lt;br /&gt;
| 123abcdef || TYPE || NODE || isLocationType || TYPE || NODE ||  c&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
Creating a Feed for FloatingRelationships will include additional fieldName entries in the Relationship section.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relationship:setRelationshipA !! Relationship:objectAReference !! Relationship:objectBReference !! Relationship:actionRelationship  !! Relationship:relId&lt;br /&gt;
|-&lt;br /&gt;
| isLocationType || TYPE || NODE || c  || &lt;br /&gt;
|-&lt;br /&gt;
| isLocationType || TYPE || NODE || u  || xxxxxxxx &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Column 1 setRelationshipA: isLocationType means that the value isLocationType defined in the CsvImportConfig will be used.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
            {&lt;br /&gt;
             &amp;quot;relType&amp;quot;: {&lt;br /&gt;
               &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
               &amp;quot;relationshipTag&amp;quot;: &amp;quot;isLocationType&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;&lt;br /&gt;
            }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Columns 2–3 objectAReference / objectBReference refer to the firstObject and secondObject that need to be linked together.&lt;br /&gt;
&lt;br /&gt;
Column 4 actionRelationship refers to the action of that Relationship (c = create, u = update).&lt;br /&gt;
&lt;br /&gt;
Column 5 relId refers to the identifier of the Relationship (used for update).&lt;br /&gt;
&lt;br /&gt;
= ReferenceLink =&lt;br /&gt;
Handling Feed and CsvImportConfig in the case of ReferenceLink&lt;br /&gt;
&lt;br /&gt;
In the CsvImportConfig, within the objectTypes: [ ] section, the following will be added:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;referenceLinks&amp;quot;: {&lt;br /&gt;
          &amp;quot;linkTagetToTL&amp;quot;: {&lt;br /&gt;
            &amp;quot;relType&amp;quot;: {&lt;br /&gt;
              &amp;quot;serviceTag&amp;quot;: &amp;quot;Translation&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasTranslationLink&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;span style=&amp;quot;background-color:yellow;&amp;quot;&amp;gt;linkTagetToTL&amp;lt;/span&amp;gt;'''&lt;br /&gt;
is key for mapping relationship to TranslationLink&lt;br /&gt;
&lt;br /&gt;
There will be no FloatingRelationship: [ ] section.&lt;br /&gt;
&lt;br /&gt;
For linking via ReferenceLink, the values defined in referenceLinks within the CsvImportConfig will be used as fieldName. The value in that fieldName must match the value in the corresponding referenceFieldNames field in order to specify which object to link to. For example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! locationType:userRef&lt;br /&gt;
! translationLink:languageId&lt;br /&gt;
! translationLink:textTag&lt;br /&gt;
! translationLink:weight&lt;br /&gt;
! translationLink:&amp;lt;span style=&amp;quot;background-color:yellow;&amp;quot;&amp;gt;linkTagetToTL&amp;lt;/span&amp;gt;&lt;br /&gt;
! translationLink:userRef&lt;br /&gt;
! TS:actionField&lt;br /&gt;
! TS:text&lt;br /&gt;
! TS:linkTagetToTS&lt;br /&gt;
! TS:userRef&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;AA&amp;lt;/span&amp;gt; || TH || Locations || 10 || &amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;AA&amp;lt;/span&amp;gt; || &amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;BB&amp;lt;/span&amp;gt; || c || Country || &amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;BB&amp;lt;/span&amp;gt; || CC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In the table, it specifies that translationLink is linked to locationType by using the fieldName linkTagetToTL to determine the relType and direction as defined in the CsvImportConfig.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		  {&lt;br /&gt;
            &amp;quot;relType&amp;quot;: {&lt;br /&gt;
              &amp;quot;serviceTag&amp;quot;: &amp;quot;Translation&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasTranslationLink&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Import Data|Working_documents - Import Data]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Import Data]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-02-26_-_ImportData_CsvImportConfig&amp;diff=4119</id>
		<title>2026-02-26 - ImportData CsvImportConfig</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-02-26_-_ImportData_CsvImportConfig&amp;diff=4119"/>
		<updated>2026-02-27T08:43:36Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CsvImportConfig =&lt;br /&gt;
== CsvImportConfig ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;csvImportConfigId&amp;quot;: &amp;quot;xxxxx&amp;quot;,&lt;br /&gt;
    &amp;quot;recordDeliminator&amp;quot;: &amp;quot;\n&amp;quot;,&lt;br /&gt;
    &amp;quot;useUserReference&amp;quot;: true,&lt;br /&gt;
    &amp;quot;fieldDeliminator&amp;quot;: &amp;quot;,&amp;quot;,&lt;br /&gt;
    &amp;quot;escapeString&amp;quot;: &amp;quot;\\&amp;quot;,&lt;br /&gt;
    &amp;quot;removeFloatingEscapeString&amp;quot;: true,&lt;br /&gt;
    &amp;quot;removeWhiteSpace&amp;quot;: true,&lt;br /&gt;
    &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
      &amp;quot;titleRow&amp;quot;: 1,&lt;br /&gt;
      &amp;quot;titleRowOpenEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;titleRowCloseEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;replacefieldNames&amp;quot;: {}&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;ignoreRows&amp;quot;: [4,5],&lt;br /&gt;
    &amp;quot;overwriteColumnName&amp;quot;: {&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;{replaceToValue}&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;objectTypes&amp;quot;: [],&lt;br /&gt;
    &amp;quot;floatingRelationships&amp;quot;: []&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*csvImportConfigId (required) = The ID of the CsvImportConfig&lt;br /&gt;
&lt;br /&gt;
*recordDelimiter (required) = The row delimiter&lt;br /&gt;
&lt;br /&gt;
*fieldDelimiter (required) = The column delimiter&lt;br /&gt;
&lt;br /&gt;
*escapeString (required) = The character used to escape delimiters (e.g., &amp;quot; to indicate that this is a quotation mark, not a column delimiter)&lt;br /&gt;
&lt;br /&gt;
*removeFloatingEscapeString (required) = Remove any standalone (floating) escape characters&lt;br /&gt;
&lt;br /&gt;
*removeWhiteSpace (required) = Remove whitespace within the column&lt;br /&gt;
&lt;br /&gt;
*titleRow (required) = Specify which row (x) of the CSV is the header row&lt;br /&gt;
&lt;br /&gt;
*ignoreRows (required) = Ignore the specified rows&lt;br /&gt;
&lt;br /&gt;
==objectTypes==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;objectTypes&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;setObjectTypeFieldNames&amp;quot;: {},&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Translations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;translationLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;searchPattern&amp;quot;: &amp;quot;^translationLink.*:&amp;quot;,&lt;br /&gt;
        &amp;quot;instancePattern&amp;quot;: &amp;quot;(?&amp;lt;=translationLink)(.*)(?=:)&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldNamePatterns&amp;quot;: [&lt;br /&gt;
          {&lt;br /&gt;
            &amp;quot;fieldNamePattern&amp;quot;: &amp;quot;(?&amp;lt;=:translationLink-A)&amp;quot;,&lt;br /&gt;
            &amp;quot;fieldName&amp;quot;: &amp;quot;translationLink&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldNameSearchPattern&amp;quot;: &amp;quot;(?&amp;lt;=:)(.*)&amp;quot;,&lt;br /&gt;
        &amp;quot;referenceFieldNames&amp;quot;: [&lt;br /&gt;
          &amp;quot;userRef&amp;quot;,&lt;br /&gt;
          &amp;quot;ref&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;referenceLinks&amp;quot;: {&lt;br /&gt;
          &amp;quot;linkTagetToTL&amp;quot;: {&lt;br /&gt;
            &amp;quot;relType&amp;quot;: {&lt;br /&gt;
              &amp;quot;serviceTag&amp;quot;: &amp;quot;Translation&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasTranslationLink&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;defaultActionField&amp;quot;: &amp;quot;create&amp;quot;,&lt;br /&gt;
        &amp;quot;actionField&amp;quot;: {&lt;br /&gt;
          &amp;quot;fieldName&amp;quot;: &amp;quot;actionField&amp;quot;,&lt;br /&gt;
          &amp;quot;createValue&amp;quot;: &amp;quot;c&amp;quot;,&lt;br /&gt;
          &amp;quot;updateValue&amp;quot;: &amp;quot;u&amp;quot;,&lt;br /&gt;
          &amp;quot;referenceValue&amp;quot;: &amp;quot;r&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;defaultEnclose&amp;quot;: {&lt;br /&gt;
          &amp;quot;openEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;,&lt;br /&gt;
          &amp;quot;closeEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;enclose&amp;quot;: [&lt;br /&gt;
          {&lt;br /&gt;
            &amp;quot;openEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;closeEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;alwaysEnclose&amp;quot;: &amp;quot;always&amp;quot;,&lt;br /&gt;
            &amp;quot;fieldNames&amp;quot;: [&lt;br /&gt;
              &amp;quot;weight&amp;quot;,&lt;br /&gt;
              &amp;quot;textTag&amp;quot;,&lt;br /&gt;
              &amp;quot;languageId&amp;quot;,&lt;br /&gt;
              &amp;quot;userRef&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
          }&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;emptyDataFieldNames&amp;quot;: [],&lt;br /&gt;
        &amp;quot;overwriteValues&amp;quot;: {}&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*setObjectTypeFieldNames (optional) = Specify the objType for each instancePattern (used when the same searchPattern is shared but the instancePattern differs). For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;setObjectTypeFieldNames&amp;quot;: {&lt;br /&gt;
         &amp;quot;subObjectTypeX&amp;quot;: {&lt;br /&gt;
           &amp;quot;serviceDeliverySTD1&amp;quot;: {&lt;br /&gt;
             &amp;quot;serviceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;,&lt;br /&gt;
             &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethod&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;rateTable001&amp;quot;: {&lt;br /&gt;
             &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
             &amp;quot;objectType&amp;quot;: &amp;quot;rates&amp;quot;&lt;br /&gt;
           }&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! deliveryDELIVERYSTD:actionField !! deliveryDELIVERYSTD:subObjectTypeX !! deliveryRATETABLE:actionField !! deliveryRATETABLE:subObjectTypeX&lt;br /&gt;
|-&lt;br /&gt;
| c || serviceDeliverySTD1 || c || rateTable001&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
By defining &amp;quot;searchPattern&amp;quot;: &amp;quot;^delivery.*:&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
the instancePattern is DELIVERYSTD, the objType will be set accordingly&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;,&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethod&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
the instancePattern is RATETABLE, the objType will be set accordingly.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;rates&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*searchPattern (required) = The system will look for column names that start with the value of searchPattern, followed by :&lt;br /&gt;
&lt;br /&gt;
*referenceLinks (optional) = Used in the case of a ReferenceLink to specify the targetObject and which Relationship to use&lt;br /&gt;
&lt;br /&gt;
*instancePattern (required) = Extract the Instance name (e.g., if searchPattern = translationLink, then translationLinkA will extract A as the Instance)&lt;br /&gt;
&lt;br /&gt;
*referenceFieldNames (required) = The fields used as references&lt;br /&gt;
&lt;br /&gt;
*actionField (required) = Define the action abbreviation in the CSV (e.g., c = create, u = update, r = reference)&lt;br /&gt;
&lt;br /&gt;
*defaultActionField (optional) = If no Action is specified, the system will use the Action defined here&lt;br /&gt;
&lt;br /&gt;
*enclose (required) = The fields specified in fieldNames must be enclosed&lt;br /&gt;
&lt;br /&gt;
*defaultEnclose (required) = Fields not specified in enclose will use the defaultEnclose value&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Feed CSV=&lt;br /&gt;
When creating a CSV, the fieldName values will be defined according to the schemas of the object to be created, and referenceFieldNames will always be included as well. For example, when creating a rate.&lt;br /&gt;
&lt;br /&gt;
rate have a fieldNames&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;rates&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: false,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;ratesId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
          &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;,&lt;br /&gt;
          &amp;quot;minLength&amp;quot;: 1&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;upToValue&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {},&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;rate&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {},&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;ratesId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By specifying it in the CsvImportConfig as follows.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;searchPattern&amp;quot;: &amp;quot;^DeliverRate.*:&amp;quot;,&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot; |  &lt;br /&gt;
! DeliverRate:actionField !! DeliverRate:ratesId !! DeliverRate:upToValue !! DeliverRate:rate !! DeliverRate:userRef&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 1 ||  ||  || 100 || 10 || rate001&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 2 ||  || rate1234567 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 3 ||  || rate1234567 || 50 || 5 || &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 4 || d || rate1234567 ||  ||  || rate001&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
1.Create case: Send the fieldNames defined in the Schemas along with the referenceFieldNames (excluding fieldNames that are identifiers).&lt;br /&gt;
&lt;br /&gt;
2.Get case: Send only the fieldNames that are identifiers.&lt;br /&gt;
&lt;br /&gt;
3.Update case: Send all fieldNames defined in the Schemas (fieldNames must have canUpdate set to true).&lt;br /&gt;
&lt;br /&gt;
4.Delete case: Send the fieldNames that are identifiers along with the referenceFieldNames.&lt;br /&gt;
&lt;br /&gt;
=FloatingRelationShip=&lt;br /&gt;
Handling Feed and CsvImportConfig in the case of FloatingRelationship&lt;br /&gt;
&lt;br /&gt;
CsvImportConfig will additionally include:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;floatingRelationships&amp;quot;: [ &lt;br /&gt;
     {&lt;br /&gt;
       &amp;quot;setRelationshipTagFieldNames&amp;quot;: {&lt;br /&gt;
         &amp;quot;setRelationshipA&amp;quot;: {&lt;br /&gt;
           &amp;quot;isLocationType&amp;quot;: {&lt;br /&gt;
             &amp;quot;relType&amp;quot;: {&lt;br /&gt;
               &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
               &amp;quot;relationshipTag&amp;quot;: &amp;quot;isLocationType&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;hasTranslationLink&amp;quot;: {&lt;br /&gt;
             &amp;quot;relType&amp;quot;: {&lt;br /&gt;
               &amp;quot;serviceTag&amp;quot;: &amp;quot;Translations&amp;quot;,&lt;br /&gt;
               &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasTranslationLink&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
           }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
       &amp;quot;relationshipTag&amp;quot;: {&lt;br /&gt;
         &amp;quot;relType&amp;quot;: {&lt;br /&gt;
           &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
           &amp;quot;relationshipTag&amp;quot;: &amp;quot;isLocationType&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;&lt;br /&gt;
       },&lt;br /&gt;
       &amp;quot;searchPattern&amp;quot;: &amp;quot;^RELATIONSHIP.*:&amp;quot;,&lt;br /&gt;
       &amp;quot;instancePattern&amp;quot;: &amp;quot;(?&amp;lt;=RELATIONSHIP)(.*)(?=:)&amp;quot;,&lt;br /&gt;
       &amp;quot;relationshipPropertyPatterns&amp;quot;: [&lt;br /&gt;
         {&lt;br /&gt;
           &amp;quot;relationshipPropertyPattern&amp;quot;: &amp;quot;originTimestamp&amp;quot;,&lt;br /&gt;
           &amp;quot;relationshipProperty&amp;quot;: {&lt;br /&gt;
             &amp;quot;settings&amp;quot;: {&lt;br /&gt;
               &amp;quot;encoding&amp;quot;: &amp;quot;Number&amp;quot;&lt;br /&gt;
             }&lt;br /&gt;
           }&lt;br /&gt;
         }&lt;br /&gt;
       ],&lt;br /&gt;
       &amp;quot;relationshipPropertySearchPattern&amp;quot;: &amp;quot;(?&amp;lt;=:)(.*)&amp;quot;,&lt;br /&gt;
       &amp;quot;objectAReferenceLinks&amp;quot;: [&lt;br /&gt;
         &amp;quot;objectAReference&amp;quot;&lt;br /&gt;
       ],&lt;br /&gt;
       &amp;quot;objectBReferenceLinks&amp;quot;: [&lt;br /&gt;
         &amp;quot;objectBReference&amp;quot;&lt;br /&gt;
       ],&lt;br /&gt;
       &amp;quot;actionRelationship&amp;quot;: {&lt;br /&gt;
         &amp;quot;fieldName&amp;quot;: &amp;quot;actionRelationship&amp;quot;,&lt;br /&gt;
         &amp;quot;createValue&amp;quot;: &amp;quot;c&amp;quot;,&lt;br /&gt;
         &amp;quot;deleteValue&amp;quot;: &amp;quot;d&amp;quot;,&lt;br /&gt;
         &amp;quot;updateValue&amp;quot;: &amp;quot;u&amp;quot;&lt;br /&gt;
       },&lt;br /&gt;
       &amp;quot;relIdPatterns&amp;quot;: [&lt;br /&gt;
         &amp;quot;relId&amp;quot;&lt;br /&gt;
       ],&lt;br /&gt;
       &amp;quot;enclose&amp;quot;: [&lt;br /&gt;
         {&lt;br /&gt;
           &amp;quot;openEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;,&lt;br /&gt;
           &amp;quot;closeEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;,&lt;br /&gt;
           &amp;quot;alwaysEnclose&amp;quot;: &amp;quot;always&amp;quot;,&lt;br /&gt;
           &amp;quot;fieldNames&amp;quot;: []&lt;br /&gt;
         }&lt;br /&gt;
       ]&lt;br /&gt;
     }&lt;br /&gt;
   ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*setRelationshipTagFieldNames (required) = Defines how Relationships are selected for linking (if the header specifies setRelationshipA, only the values defined in setRelationshipA within the CsvImportConfig can be used).&lt;br /&gt;
&lt;br /&gt;
*relationshipTag (required) = If the specified Relationship value is not provided, the value defined here will be used as the default Relationship.&lt;br /&gt;
&lt;br /&gt;
*objectAReferenceLinks / objectBReferenceLinks (required) = Used to specify the source object and the target object (these values must match the referenceFieldNames of the corresponding objectTypes).&lt;br /&gt;
&lt;br /&gt;
*relIdPatterns (required) = The values defined here will be treated as the identifiers of the Relationships.&lt;br /&gt;
&lt;br /&gt;
Handling Feed for FloatingRelationships&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! locatiosType:locatiosTypeId !! locatiosType:uesrRef !! locatiosNode:userRef !! Relationship:setRelationshipA !! Relationship:objectAReference !! Relationship:objectBReference !! Relationship:actionRelationship &lt;br /&gt;
|-&lt;br /&gt;
| 123abcdef || TYPE || NODE || isLocationType || TYPE || NODE ||  c&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
Creating a Feed for FloatingRelationships will include additional fieldName entries in the Relationship section.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relationship:setRelationshipA !! Relationship:objectAReference !! Relationship:objectBReference !! Relationship:actionRelationship  !! Relationship:relId&lt;br /&gt;
|-&lt;br /&gt;
| isLocationType || TYPE || NODE || c  || &lt;br /&gt;
|-&lt;br /&gt;
| isLocationType || TYPE || NODE || u  || xxxxxxxx &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Column 1 setRelationshipA: isLocationType means that the value isLocationType defined in the CsvImportConfig will be used.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
            {&lt;br /&gt;
             &amp;quot;relType&amp;quot;: {&lt;br /&gt;
               &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
               &amp;quot;relationshipTag&amp;quot;: &amp;quot;isLocationType&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;&lt;br /&gt;
            }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Columns 2–3 objectAReference / objectBReference refer to the firstObject and secondObject that need to be linked together.&lt;br /&gt;
&lt;br /&gt;
Column 4 actionRelationship refers to the action of that Relationship (c = create, u = update).&lt;br /&gt;
&lt;br /&gt;
Column 5 relId refers to the identifier of the Relationship (used for update).&lt;br /&gt;
&lt;br /&gt;
= ReferenceLink =&lt;br /&gt;
Handling Feed and CsvImportConfig in the case of ReferenceLink&lt;br /&gt;
&lt;br /&gt;
In the CsvImportConfig, within the objectTypes: [ ] section, the following will be added:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;referenceLinks&amp;quot;: {&lt;br /&gt;
          &amp;quot;linkTagetToTL&amp;quot;: {&lt;br /&gt;
            &amp;quot;relType&amp;quot;: {&lt;br /&gt;
              &amp;quot;serviceTag&amp;quot;: &amp;quot;Translation&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasTranslationLink&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;span style=&amp;quot;background-color:yellow;&amp;quot;&amp;gt;linkTagetToTL&amp;lt;/span&amp;gt;'''&lt;br /&gt;
is key for mapping relationship to TranslationLink&lt;br /&gt;
&lt;br /&gt;
There will be no FloatingRelationship: [ ] section.&lt;br /&gt;
&lt;br /&gt;
For linking via ReferenceLink, the values defined in referenceLinks within the CsvImportConfig will be used as fieldName. The value in that fieldName must match the value in the corresponding referenceFieldNames field in order to specify which object to link to. For example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! locationType:userRef&lt;br /&gt;
! translationLink:languageId&lt;br /&gt;
! translationLink:textTag&lt;br /&gt;
! translationLink:weight&lt;br /&gt;
! translationLink:&amp;lt;span style=&amp;quot;background-color:yellow;&amp;quot;&amp;gt;linkTagetToTL&amp;lt;/span&amp;gt;&lt;br /&gt;
! translationLink:userRef&lt;br /&gt;
! TS:actionField&lt;br /&gt;
! TS:text&lt;br /&gt;
! TS:linkTagetToTS&lt;br /&gt;
! TS:userRef&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;AA&amp;lt;/span&amp;gt; || TH || Locations || 10 || &amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;AA&amp;lt;/span&amp;gt; || &amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;BB&amp;lt;/span&amp;gt; || c || Country || &amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;BB&amp;lt;/span&amp;gt; || CC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In the table, it specifies that translationLink is linked to locationType by using the fieldName linkTagetToTL to determine the relType and direction as defined in the CsvImportConfig.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		  {&lt;br /&gt;
            &amp;quot;relType&amp;quot;: {&lt;br /&gt;
              &amp;quot;serviceTag&amp;quot;: &amp;quot;Translation&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasTranslationLink&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-02-26_-_ImportData_CsvImportConfig&amp;diff=4117</id>
		<title>2026-02-26 - ImportData CsvImportConfig</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-02-26_-_ImportData_CsvImportConfig&amp;diff=4117"/>
		<updated>2026-02-26T11:07:31Z</updated>

		<summary type="html">&lt;p&gt;Jammy: Created page with &amp;quot;= CsvImportConfig = &amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; {     &amp;quot;csvImportConfigId&amp;quot;: &amp;quot;xxxxx&amp;quot;,     &amp;quot;recordDeliminator&amp;quot;: &amp;quot;\n&amp;quot;,     &amp;quot;useUserReference&amp;quot;: true,     &amp;quot;fieldDeliminator&amp;quot;: &amp;quot;,&amp;quot;,     &amp;quot;escapeString&amp;quot;: &amp;quot;\\&amp;quot;,     &amp;quot;removeFloatingEscapeString&amp;quot;: true,     &amp;quot;removeWhiteSpace&amp;quot;: true,     &amp;quot;fieldNames&amp;quot;: {       &amp;quot;titleRow&amp;quot;: 1,       &amp;quot;titleRowOpenEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;,       &amp;quot;titleRowCloseEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;,       &amp;quot;replacefieldNames&amp;quot;: {}     },     &amp;quot;ignoreRows&amp;quot;: [4,5],     &amp;quot;overwriteColumnNam...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CsvImportConfig =&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;csvImportConfigId&amp;quot;: &amp;quot;xxxxx&amp;quot;,&lt;br /&gt;
    &amp;quot;recordDeliminator&amp;quot;: &amp;quot;\n&amp;quot;,&lt;br /&gt;
    &amp;quot;useUserReference&amp;quot;: true,&lt;br /&gt;
    &amp;quot;fieldDeliminator&amp;quot;: &amp;quot;,&amp;quot;,&lt;br /&gt;
    &amp;quot;escapeString&amp;quot;: &amp;quot;\\&amp;quot;,&lt;br /&gt;
    &amp;quot;removeFloatingEscapeString&amp;quot;: true,&lt;br /&gt;
    &amp;quot;removeWhiteSpace&amp;quot;: true,&lt;br /&gt;
    &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
      &amp;quot;titleRow&amp;quot;: 1,&lt;br /&gt;
      &amp;quot;titleRowOpenEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;titleRowCloseEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;replacefieldNames&amp;quot;: {}&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;ignoreRows&amp;quot;: [4,5],&lt;br /&gt;
    &amp;quot;overwriteColumnName&amp;quot;: {&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;{replaceToValue}&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;objectTypes&amp;quot;: [],&lt;br /&gt;
    &amp;quot;floatingRelationships&amp;quot;: []&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*csvImportConfigId (required) = The ID of the CsvImportConfig&lt;br /&gt;
&lt;br /&gt;
*recordDelimiter (required) = The row delimiter&lt;br /&gt;
&lt;br /&gt;
*fieldDelimiter (required) = The column delimiter&lt;br /&gt;
&lt;br /&gt;
*escapeString (required) = The character used to escape delimiters (e.g., &amp;quot; to indicate that this is a quotation mark, not a column delimiter)&lt;br /&gt;
&lt;br /&gt;
*removeFloatingEscapeString (required) = Remove any standalone (floating) escape characters&lt;br /&gt;
&lt;br /&gt;
*removeWhiteSpace (required) = Remove whitespace within the column&lt;br /&gt;
&lt;br /&gt;
*titleRow (required) = Specify which row (x) of the CSV is the header row&lt;br /&gt;
&lt;br /&gt;
*ignoreRows (required) = Ignore the specified rows&lt;br /&gt;
&lt;br /&gt;
=objectTypes=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;objectTypes&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;setObjectTypeFieldNames&amp;quot;: {},&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Translations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;translationLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;searchPattern&amp;quot;: &amp;quot;^translationLink.*:&amp;quot;,&lt;br /&gt;
        &amp;quot;instancePattern&amp;quot;: &amp;quot;(?&amp;lt;=translationLink)(.*)(?=:)&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldNamePatterns&amp;quot;: [&lt;br /&gt;
          {&lt;br /&gt;
            &amp;quot;fieldNamePattern&amp;quot;: &amp;quot;(?&amp;lt;=:translationLink-A)&amp;quot;,&lt;br /&gt;
            &amp;quot;fieldName&amp;quot;: &amp;quot;translationLink&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldNameSearchPattern&amp;quot;: &amp;quot;(?&amp;lt;=:)(.*)&amp;quot;,&lt;br /&gt;
        &amp;quot;referenceFieldNames&amp;quot;: [&lt;br /&gt;
          &amp;quot;userRef&amp;quot;,&lt;br /&gt;
          &amp;quot;ref&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;referenceLinks&amp;quot;: {&lt;br /&gt;
          &amp;quot;linkTagetToTL&amp;quot;: {&lt;br /&gt;
            &amp;quot;relType&amp;quot;: {&lt;br /&gt;
              &amp;quot;serviceTag&amp;quot;: &amp;quot;Translation&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasTranslationLink&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;defaultActionField&amp;quot;: &amp;quot;create&amp;quot;,&lt;br /&gt;
        &amp;quot;actionField&amp;quot;: {&lt;br /&gt;
          &amp;quot;fieldName&amp;quot;: &amp;quot;actionField&amp;quot;,&lt;br /&gt;
          &amp;quot;createValue&amp;quot;: &amp;quot;c&amp;quot;,&lt;br /&gt;
          &amp;quot;updateValue&amp;quot;: &amp;quot;u&amp;quot;,&lt;br /&gt;
          &amp;quot;referenceValue&amp;quot;: &amp;quot;r&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;defaultEnclose&amp;quot;: {&lt;br /&gt;
          &amp;quot;openEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;,&lt;br /&gt;
          &amp;quot;closeEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;enclose&amp;quot;: [&lt;br /&gt;
          {&lt;br /&gt;
            &amp;quot;openEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;closeEnclose&amp;quot;: &amp;quot;\&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;alwaysEnclose&amp;quot;: &amp;quot;always&amp;quot;,&lt;br /&gt;
            &amp;quot;fieldNames&amp;quot;: [&lt;br /&gt;
              &amp;quot;weight&amp;quot;,&lt;br /&gt;
              &amp;quot;textTag&amp;quot;,&lt;br /&gt;
              &amp;quot;languageId&amp;quot;,&lt;br /&gt;
              &amp;quot;userRef&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
          }&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;emptyDataFieldNames&amp;quot;: [],&lt;br /&gt;
        &amp;quot;overwriteValues&amp;quot;: {}&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*setObjectTypeFieldNames (optional) = Specify the objType for each instancePattern (used when the same searchPattern is shared but the instancePattern differs). For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;setObjectTypeFieldNames&amp;quot;: {&lt;br /&gt;
         &amp;quot;subObjectTypeX&amp;quot;: {&lt;br /&gt;
           &amp;quot;serviceDeliverySTD1&amp;quot;: {&lt;br /&gt;
             &amp;quot;serviceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;,&lt;br /&gt;
             &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethod&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;rateTable001&amp;quot;: {&lt;br /&gt;
             &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
             &amp;quot;objectType&amp;quot;: &amp;quot;rates&amp;quot;&lt;br /&gt;
           }&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! deliveryDELIVERYSTD:actionField !! deliveryDELIVERYSTD:subObjectTypeX !! deliveryRATETABLE:actionField !! deliveryRATETABLE:subObjectTypeX&lt;br /&gt;
|-&lt;br /&gt;
| c || serviceDeliverySTD1 || c || rateTable001&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
By defining &amp;quot;searchPattern&amp;quot;: &amp;quot;^delivery.*:&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
the instancePattern is DELIVERYSTD, the objType will be set accordingly&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;,&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethod&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
the instancePattern is RATETABLE, the objType will be set accordingly.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;rates&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*searchPattern (required) = The system will look for column names that start with the value of searchPattern, followed by :&lt;br /&gt;
&lt;br /&gt;
*referenceLinks (optional) = Used in the case of a ReferenceLink to specify the targetObject and which Relationship to use&lt;br /&gt;
&lt;br /&gt;
*instancePattern (required) = Extract the Instance name (e.g., if searchPattern = translationLink, then translationLinkA will extract A as the Instance)&lt;br /&gt;
&lt;br /&gt;
*referenceFieldNames (required) = The fields used as references&lt;br /&gt;
&lt;br /&gt;
*actionField (required) = Define the action abbreviation in the CSV (e.g., c = create, u = update, r = reference)&lt;br /&gt;
&lt;br /&gt;
*defaultActionField (optional) = If no Action is specified, the system will use the Action defined here&lt;br /&gt;
&lt;br /&gt;
*enclose (required) = The fields specified in fieldNames must be enclosed&lt;br /&gt;
&lt;br /&gt;
*defaultEnclose (required) = Fields not specified in enclose will use the defaultEnclose value&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=FloatingRelationShip=&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Delivery_Method_Standard&amp;diff=3967</id>
		<title>Service - Delivery Method Standard</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Delivery_Method_Standard&amp;diff=3967"/>
		<updated>2026-01-13T09:30:40Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handler service for basic delivery methods that use [[Service - Delivery Method Rate Table]] for pricing.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-delivery-method-standard&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
extendObjType:deliveryMethod&lt;br /&gt;
===deliveryMethodStandard===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethodStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;extendObjType&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodMgr&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethod&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;DeliveryMethodRecord&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodMgr&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;versionedData&amp;quot;,&lt;br /&gt;
      &amp;quot;versionedDataLabel&amp;quot;: &amp;quot;deliveryMethodSettings&amp;quot;,&lt;br /&gt;
      &amp;quot;storageResourceTag&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
        &amp;quot;defaultValueType&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
          &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
          &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
          &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
          &amp;quot;validation&amp;quot;: {&lt;br /&gt;
            &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;defaultValueId&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
          &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
          &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
          &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
          &amp;quot;validation&amp;quot;: {&lt;br /&gt;
            &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;defaultValueLanguageId&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
          &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
          &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
          &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
          &amp;quot;validation&amp;quot;: {&lt;br /&gt;
            &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;defaultAccumulateValue&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
          &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
          &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
          &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
          &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;propertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Property&lt;br /&gt;
=== deliveryMethodStandardPropertyLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethodStandardPropertyLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;deliveryMethodStandardPropertyLabelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;deliveryMethodStandardPropertyLabelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== deliveryMethodStandardPropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethodStandardPropertyValue&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;deliveryMethodStandardPropertyValueId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;deliveryMethodStandardPropertyValueId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==relationshipSchemas==&lt;br /&gt;
*'''RelationshipTags'''&lt;br /&gt;
&lt;br /&gt;
===fromLocationNode===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethodStandard&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ownsDeliveryMethodRateTable===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethodStandard&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;rateTable&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== isDeliveryMethodStandardPropertyLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethodStandardPropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethodStandardPropertyLabel&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== hasDeliveryMethodStandardPropertyValue  ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethodStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethodStandardPropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
 canChangeToRelTypes: [&lt;br /&gt;
    {&lt;br /&gt;
      serviceTag:&amp;quot;deliveryMethodStandard&amp;quot;,&lt;br /&gt;
      relationshipTag: &amp;quot;disabledDeliveryMethodStandardPropertyValue&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
   ],&lt;br /&gt;
  canMove:true&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== hasDeliveryMethodRateTable ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethodStandard&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;rateTable&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      serviceTag:&amp;quot;deliveryMethodStandard&amp;quot;,&lt;br /&gt;
      relationshipTag: &amp;quot;disabledDeliveryMethodRateTable&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
   ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: true&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== disabledDeliveryMethodStandardPropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethodStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethodStandardPropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  canChangeToRelTypes: [&lt;br /&gt;
    {&lt;br /&gt;
      serviceTag:&amp;quot;deliveryMethodStandard&amp;quot;,&lt;br /&gt;
      relationshipTag: &amp;quot;hasDeliveryMethodStandardPropertyValue&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
   ],&lt;br /&gt;
  canMove:true&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== disabledDeliveryMethodRateTable ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DelivMethodSTD&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethodStandard&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;rateTable&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      serviceTag:&amp;quot;deliveryMethodStandard&amp;quot;,&lt;br /&gt;
      relationshipTag: &amp;quot;hasDeliveryMethodRateTable&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
   ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: true&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= DynamoDB tables =&lt;br /&gt;
&lt;br /&gt;
== [[Standard Config Table Per Service]] ==&lt;br /&gt;
&lt;br /&gt;
=== Configuration tags ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configTag: &amp;quot;DeliveryMethodHandlerServiceNameTag&amp;quot;&lt;br /&gt;
	configKey: &amp;quot;DeliveryMethodHandlerServiceNameTag&amp;quot;&lt;br /&gt;
	configValue: xxx // this own services ServiceNameTag, eg &amp;quot;DeliveryMethodStandard&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configTag: &amp;quot;ProductGraphServiceName&amp;quot;&lt;br /&gt;
	configKey: &amp;quot;ProductGraphServiceName&amp;quot;&lt;br /&gt;
	configValue: xxx // eg: &amp;quot;ProductGraph&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configTag: &amp;quot;DeliveryMethodManagerServiceName&amp;quot;&lt;br /&gt;
	configKey: &amp;quot;DeliveryMethodManagerServiceName&amp;quot;&lt;br /&gt;
	configValue: xxx // eg: &amp;quot;DeliveryMethodManager&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configTag: &amp;quot;DeliveryMethodRateTableServiceName&amp;quot;&lt;br /&gt;
	configKey: &amp;quot;DeliveryMethodRateTableServiceName&amp;quot;&lt;br /&gt;
	configValue: xxx // eg: &amp;quot;DeliveryMethodRateTable&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configTag: &amp;quot;DeliveryMethodRbacServiceName&amp;quot;&lt;br /&gt;
	configKey: &amp;quot;DeliveryMethodRbacServiceName&amp;quot;&lt;br /&gt;
	configValue: xxx // eg: &amp;quot;Rbac&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Graph database = &lt;br /&gt;
&lt;br /&gt;
== [[Service - Products Graph]]==&lt;br /&gt;
&lt;br /&gt;
=== Nodes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{deliveryMethodSharedLib.consts.DELIVERYMETHOD_GRAPH_NODE_LABEL}&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{DeliveryMethodStandardLib.DELIVERYMETHOD_GRAPH_NODE_LABEL}PropertyLabel&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{DeliveryMethodStandardLib.DELIVERYMETHOD_GRAPH_NODE_LABEL}Property&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* see [[NPM module - Izara Core - Property Node|DataSchemaLib]]&lt;br /&gt;
&lt;br /&gt;
=== Versioned data ===&lt;br /&gt;
&lt;br /&gt;
==== deliveryMethodSettings ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	properties: {&lt;br /&gt;
		defaultValueType: {}, // orderQuantity|orderSubtotal|productAttributeId|sellOfferTermId&lt;br /&gt;
		defaultValueId: {}, //(optinalOnCreate) used for productAttributeId|sellOfferTermId&lt;br /&gt;
		defaultValueLanguageId: {}, // (optinalOnCreate) used for productAttributeId|sellOfferTermId, when finding attribute value need to set language to find&lt;br /&gt;
		defaultAccumulateValue: true //(optinalOnCreate) default: true, if set to false will find the largest value out of all sellOffers in the order&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Relationships ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;{DeliveryMethodStandardLib.createfromLocationNodeRelationshipType()}&amp;quot;, // &amp;quot;from_LocationNode&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		elementCanBeRemoved: false,&lt;br /&gt;
		allPropertiesImmutable: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			originTimestamp: //timestamp the request to create/change this relationship was sent&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 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&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;{DeliveryMethodStandardLib.createHasDeliveryMethodRateTableGraphRelationshipType()}&amp;quot;, // &amp;quot;has_deliveryMethodRateTable&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		elementCanBeRemoved: true,&lt;br /&gt;
		allPropertiesImmutable: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			originTimestamp: //timestamp the request to create/change this relationship was sent&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;{DeliveryMethodStandardLib.createDisabledDeliveryMethodRateTableGraphRelationshipType()}&amp;quot;, // &amp;quot;disabled_deliveryMethodRateTable&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		elementCanBeRemoved: true,&lt;br /&gt;
		allPropertiesImmutable: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			originTimestamp: //timestamp the request to create/change this relationship was sent&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;{DeliveryMethodStandardLib.createHasDeliveryMethodRateTableGraphRelationshipType()}&amp;quot;, // &amp;quot;owns_deliveryMethodRateTable&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		elementCanBeRemoved: true,&lt;br /&gt;
		allPropertiesImmutable: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			originTimestamp: //timestamp the request to create/change this relationship was sent&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 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)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;has_{DeliveryMethodStandardLib.DELIVERYMETHOD_GRAPH_NODE_LABEL}Property&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;disabled_{DeliveryMethodStandardLib.DELIVERYMETHOD_GRAPH_NODE_LABEL}Property&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;is_{DeliveryMethodStandardLib.DELIVERYMETHOD_GRAPH_NODE_LABEL}PropertyLabel&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* see [[NPM module - Izara Core - Property Node|DataSchemaLib]]&lt;br /&gt;
&lt;br /&gt;
= Complex Filter requests =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	filterType: &amp;quot;handlerDeliveryMethod&amp;quot; //unique id is deliveryMethodId&lt;br /&gt;
	type: &amp;quot;group&amp;quot;,&lt;br /&gt;
	elements:&lt;br /&gt;
	[&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			logicalTag: &amp;quot;currencyId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			logicalTag: &amp;quot;fromLocationNodeId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;complexFilter&amp;quot;,&lt;br /&gt;
			complexFilter: {&lt;br /&gt;
				filterType: &amp;quot;deliveryMethodRateTable&amp;quot;,&lt;br /&gt;
				// see [[Service - Delivery Method Rate Table|Complex Filter requests]]&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;complexFilter&amp;quot;,&lt;br /&gt;
			complexFilter: {&lt;br /&gt;
				filterType: &amp;quot;deliveryMethodProperty&amp;quot;,&lt;br /&gt;
				// see [[NPM module - Izara Core - Property Node|Complex Filter requests]]&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;complexFilter&amp;quot;,&lt;br /&gt;
			complexFilter: {&lt;br /&gt;
				filterType: &amp;quot;deliveryMethodNameTranslation&amp;quot; //unique id is deliveryMethodId&lt;br /&gt;
				type: &amp;quot;group&amp;quot;,&lt;br /&gt;
				elements: &lt;br /&gt;
				[&lt;br /&gt;
					{&lt;br /&gt;
						// see [[Service - Translations|Complex Filter requests]]&lt;br /&gt;
						type: &amp;quot;logical&amp;quot;,&lt;br /&gt;
						logicalTag: &amp;quot;textTag_languageId_text&amp;quot;,&lt;br /&gt;
						resultType: &amp;quot;deliveryMethod&amp;quot;,&lt;br /&gt;
						textTag: &amp;quot;deliveryMethodName&amp;quot;,&lt;br /&gt;
						languageId: &amp;quot;en&amp;quot;,&lt;br /&gt;
						text: &amp;quot;Is a great term&amp;quot;,&lt;br /&gt;
						subjectIdentifierPropertyName: &amp;quot;deliveryMethodId&amp;quot;,&lt;br /&gt;
						caseSensitive: true&lt;br /&gt;
					},&lt;br /&gt;
				]&lt;br /&gt;
			}&lt;br /&gt;
		},		&lt;br /&gt;
		...&lt;br /&gt;
	]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Translate Ids - deliveryMethodRateTable to deliveryMethod ==&lt;br /&gt;
&lt;br /&gt;
* only find deliveryMethodIds that are enabled&lt;br /&gt;
&lt;br /&gt;
= Data structure notes =&lt;br /&gt;
&lt;br /&gt;
* Users can create new deliveryMethods which are uniquely identified by their translation&lt;br /&gt;
* deliveryMethods have RBAC structure, default to creator having admin permissions, but admin can add other roles etc..&lt;br /&gt;
* Any user can attach any deliveryMethod to a SellOfferPlan&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Delivery Method Standard|Delivery Method Standard]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Delivery Method Standard]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Locations&amp;diff=3966</id>
		<title>Service - Locations</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Locations&amp;diff=3966"/>
		<updated>2026-01-13T08:57:17Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Manages Location Graph&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-core-locations/izara-core-locations-locations/src/master/&lt;br /&gt;
&lt;br /&gt;
= ObjectSchemas =&lt;br /&gt;
=== LocationType ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;locationType&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;locationTypeId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;locationTypeId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LocationNode ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;locationNode&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;locationNodeId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;locationNodeId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LocationLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;locationNode&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;locationNodeId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;locationNodeId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= RelationshipSchemas =&lt;br /&gt;
=== hasLocationLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== isLocationNode ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== isLocationType ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationType&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Translations = &lt;br /&gt;
&lt;br /&gt;
== locationNode ==&lt;br /&gt;
&lt;br /&gt;
* given name of the location, eg: Bangkok&lt;br /&gt;
&lt;br /&gt;
== locationType ==&lt;br /&gt;
&lt;br /&gt;
* description of the type of label, eg: Country&lt;br /&gt;
* see note about about adding a second translation textTag for presentation text, because locationType translation is used to create locationTypeId, so if want to split Post Codes for different countries into their own locationTypes will need to have unique text (eg: &amp;quot;Post Code (USA)&amp;quot;, but might want to present with same text (eg: &amp;quot;Post Code&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
= Using locationNodeIds to search for sell offers =&lt;br /&gt;
&lt;br /&gt;
* Sellers set where they ship to, setting more inclusive ship to locationNodeIds is best (if it matches their actual service) because will be included in all searches for lower level locationNodeIds&lt;br /&gt;
* Buyers set where they are so can see sell offers that ship there, best to be as low level/specific as possible because will search sell offers for all matching parents&lt;br /&gt;
* Buyers can use their address which will find all parent locationNodeIds for all locationNodeIds in their address, or buyers can choose specific locationNodeId/s, eg a country when not signed in, this would return less results as will only return sell offers that specify they can ship anywhere in that country&lt;br /&gt;
&lt;br /&gt;
== Possible optimization when finding matching parents ==&lt;br /&gt;
&lt;br /&gt;
* eg: when given a set of locationNodeIds from a buyer's address, we find all parent locationNodeIds and use this list to filter ship to locationNodeIds to find sell offers that ship to this buyer. This can result in a large number of queries&lt;br /&gt;
* this will be mitigated a lot by our cached complex filter and search results, but is still a lot of processing&lt;br /&gt;
* in all cases, all nodes set in an address would be searched for, these optimizations are for finding additional parents for checking&lt;br /&gt;
* we could reduce the filtering work by reducing the number of parent locationNodeIds&lt;br /&gt;
* one way is to only accept parent links that meet a certain weight, eg reach a limit of how many times they have been used as a parent in user addresses. Problem with this is lower level links will have less links, and just because a link is used little does not make it invalid&lt;br /&gt;
* another way is to curate the types of parent links to search for, eg only accept certain chains of links, such as city &amp;gt; post code &amp;gt; state, any parent nodes that do not match this chain are ignored. Would probably need to know the country beforehand to set the accepted chains. Additional processing to handle this might outweigh the gains&lt;br /&gt;
* another is to have curated parents, user entry (eg by a low level admin role) sets which are real links worth checking&lt;br /&gt;
* new plan: set only one locationNodeId as used by an address to calculate the chain of parent locationNodeIds, default is the lowest level node, but allow per address to choose which node&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Locations|Locations]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Locations]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Payment_Method_Generic&amp;diff=3965</id>
		<title>Service - Payment Method Generic</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Payment_Method_Generic&amp;diff=3965"/>
		<updated>2026-01-13T08:54:45Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handler service for generic payment methods that give text instruction to buyer at completion of sale. userPaymentMethod is also handled by each Payment Method Handler because there will be unique settings depending on the Payment Method.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-payment-method-generic/src/master/&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
===paymentMethodGeneric===&lt;br /&gt;
*ExtendObjType:paymentMethod&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;extendObjType&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodManager&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethod&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;propertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;PaymentMethodRecords&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodManager&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== userPaymentMethodGeneric ===&lt;br /&gt;
*ExtendObjType:userPaymentMethod&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;extendObjType&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodManager&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethod&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;propertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;UserPaymentMethodsRecords&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodManager&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== userPaymentMethodGenericSalePropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyValue&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;userPaymentMethodGenericSalePropertyValueId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyValueId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== userPaymentMethodGenericSalePropertyLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;userPaymentMethodGenericSalePropertyLabelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyLabelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''property'''&lt;br /&gt;
=== paymentMethodGenericPropertyLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGenericPropertyLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;paymentMethodGenericPropertyLabelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;paymentMethodGenericPropertyLabelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== paymentMethodGenericPropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;paymentMethodGenericPropertyValueId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;paymentMethodGenericPropertyValueId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== userPaymentMethodGenericPropertyLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;userPaymentMethodGenericPropertyLabelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyLabelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== userPaymentMethodGenericPropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;userPaymentMethodGenericPropertyValueId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyValueId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==RelationshipSchemas==&lt;br /&gt;
&lt;br /&gt;
=== disabledPaymentMethodGenericPropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGeneric&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: true&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
        {  &lt;br /&gt;
          serviceTag:&amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
          relationshipTag: &amp;quot;hasPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== disabledUserPaymentMethodGenericPropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGeneric&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
   &lt;br /&gt;
  &amp;quot;canMove&amp;quot;: true&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== disabledUserPaymentMethodGenericSalePropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGeneric&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasUserPaymentMethodGenericSalePropertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== hasPaymentMethodGenericPropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGeneric&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== hasUserPaymentMethodGenericPropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGeneric&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledUserPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== hasUserPaymentMethodGenericSalePropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGeneric&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledUserPaymentMethodGenericSalePropertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== isPaymentMethodGenericPropertyLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGenericPropertyLabel&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== isUserPaymentMethodGenericPropertyLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyLabel&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== isUserPaymentMethodGenericSalePropertyLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyLabel&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic node schemas ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{PaymentMethodGenericLib.PAYMENTMETHOD_GRAPH_NODE_LABEL}&amp;quot;, // &amp;quot;paymentMethod&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		identifier: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		restrictRelationships: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			paymentMethodId: {&lt;br /&gt;
				identifier: true,&lt;br /&gt;
			},&lt;br /&gt;
			paymentMethodHandlerServiceNameTag: {&lt;br /&gt;
				immutable: true,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [[Service - Translations Graph]]&lt;br /&gt;
* [[Service - Orders Graph]]&lt;br /&gt;
&lt;br /&gt;
=== Schema comes from [[NPM module - Izara Core - Property Node|BasicNodeSchemaLib]] ===&lt;br /&gt;
&lt;br /&gt;
# paymentMethodPropertyLabel&lt;br /&gt;
#* [[Service - Translations Graph]]&lt;br /&gt;
# paymentMethodProperty&lt;br /&gt;
#* [[Service - Translations Graph]]&lt;br /&gt;
# paymentMethodSalePropertyLabel&lt;br /&gt;
#* [[Service - Translations Graph]]&lt;br /&gt;
# paymentMethodSaleProperty&lt;br /&gt;
#* [[Service - Translations Graph]]&lt;br /&gt;
&lt;br /&gt;
= Complex Filter requests =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	filterType: &amp;quot;handlerPaymentMethod&amp;quot; //unique id is paymentMethodId&lt;br /&gt;
	type: &amp;quot;group&amp;quot;,&lt;br /&gt;
	elements:&lt;br /&gt;
	[&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			logicalTag: &amp;quot;currencyId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;complexFilter&amp;quot;,&lt;br /&gt;
			complexFilter: {&lt;br /&gt;
				filterType: &amp;quot;paymentMethodProperty&amp;quot;,&lt;br /&gt;
				// see [[NPM module - Izara Core - Property Node|Complex Filter requests]]&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;complexFilter&amp;quot;,&lt;br /&gt;
			complexFilter: {&lt;br /&gt;
				filterType: &amp;quot;paymentMethodNameTranslation&amp;quot; //unique id is paymentMethodId&lt;br /&gt;
				type: &amp;quot;group&amp;quot;,&lt;br /&gt;
				elements: &lt;br /&gt;
				[&lt;br /&gt;
					{&lt;br /&gt;
						// see [[Service - Translations|Complex Filter requests]]&lt;br /&gt;
						type: &amp;quot;logical&amp;quot;,&lt;br /&gt;
						logicalTag: &amp;quot;textTag_languageId_text&amp;quot;,&lt;br /&gt;
						resultType: &amp;quot;paymentMethod&amp;quot;,&lt;br /&gt;
						textTag: &amp;quot;paymentMethodName&amp;quot;,&lt;br /&gt;
						languageId: &amp;quot;en&amp;quot;,&lt;br /&gt;
						text: &amp;quot;Is a great term&amp;quot;,&lt;br /&gt;
						subjectIdentifierPropertyName: &amp;quot;paymentMethodId&amp;quot;,&lt;br /&gt;
						caseSensitive: true&lt;br /&gt;
					},&lt;br /&gt;
				]&lt;br /&gt;
			}&lt;br /&gt;
		},		&lt;br /&gt;
		...&lt;br /&gt;
	]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	filterType: &amp;quot;handlerUserPaymentMethod&amp;quot; //unique id is userPaymentMethodId&lt;br /&gt;
	type: &amp;quot;group&amp;quot;,&lt;br /&gt;
	elements:&lt;br /&gt;
	[&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			logicalTag: &amp;quot;paymentMethodId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;complexFilter&amp;quot;,&lt;br /&gt;
			complexFilter: {&lt;br /&gt;
				filterType: &amp;quot;paymentMethod&amp;quot;,&lt;br /&gt;
				// see above&lt;br /&gt;
			}&lt;br /&gt;
		},		&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;complexFilter&amp;quot;,&lt;br /&gt;
			complexFilter: {&lt;br /&gt;
				filterType: &amp;quot;userPaymentMethodProperty&amp;quot;,&lt;br /&gt;
				// see [[NPM module - Izara Core - Property Node|Complex Filter requests]]&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;complexFilter&amp;quot;,&lt;br /&gt;
			complexFilter: {&lt;br /&gt;
				filterType: &amp;quot;userPaymentMethodSaleProperty&amp;quot;,&lt;br /&gt;
				// see [[NPM module - Izara Core - Property Node|Complex Filter requests]]&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		...&lt;br /&gt;
	]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Data structure notes =&lt;br /&gt;
&lt;br /&gt;
* Users can create new paymentMethods which are uniquely identified by their translation&lt;br /&gt;
* Users can create userPaymentMethod nodes for their account which connect to paymentMethods, one user can have multiple userPaymentMethod links to the same paymentMethod, eg different Bank Transfer nodes for different bank accounts, which can be applied to sell offers in any combination&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Payment Method Generic|Payment Method Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Payment Method Generic]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Payment_Method_Manager&amp;diff=3964</id>
		<title>Service - Payment Method Manager</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Payment_Method_Manager&amp;diff=3964"/>
		<updated>2026-01-13T08:49:42Z</updated>

		<summary type="html">&lt;p&gt;Jammy: /* isPaymentMethod */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Each payment method is handled by a [[Service - Payment Method (handlers)]] service, with [[Service - Payment Method Generic]] taking all new/simple payment methods.&lt;br /&gt;
&lt;br /&gt;
The Payment Method Manager service handles shared orchestration of the Payment Method Handler services.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-payment-method-manager/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
===paymentMethod===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethod&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: false,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;PaymentMethodRecords&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodManager&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;paymentMethodId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&amp;quot;dynamoDB&amp;quot;,&amp;quot;graph&amp;quot;],&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
          &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;paymentMethodHandlerServiceNameTag&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&amp;quot;dynamoDB&amp;quot;],&lt;br /&gt;
      &amp;quot;validation&amp;quot;: { &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;}}&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;currencyId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&amp;quot;dynamoDB&amp;quot;],&lt;br /&gt;
      &amp;quot;validation&amp;quot;: { &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;}}&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;paymentMethodId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; inline&amp;gt;currencyId&amp;lt;/syntaxhighlight&amp;gt;:is uuid and connect translations declere currency eg:&amp;quot;THB&amp;quot; ect.&lt;br /&gt;
&lt;br /&gt;
=== userPaymentMethod ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethod&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: false,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;UserPaymentMethodsRecords&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodManager&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;userPaymentMethodId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;paymentMethodHandlerServiceNameTag&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;}&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;userPaymentMethodId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== isPaymentMethod ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodManager&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethod&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodManager&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethod&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Payment Method Manager|Payment Method Manager]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Payment Method Manager]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Delivery_Method_Rate_Table&amp;diff=3963</id>
		<title>Service - Delivery Method Rate Table</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Delivery_Method_Rate_Table&amp;diff=3963"/>
		<updated>2026-01-13T08:47:31Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Manages delivery rate tables for delivery methods (possible other objects). Rate tables combine set rates at a certain value with increment settings to easily maintain rate table calculations.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-delivery-method-rate-table&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== rates ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;rates&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: false,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;ratesId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
          &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;,&lt;br /&gt;
          &amp;quot;minLength&amp;quot;: 1&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;upToValue&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;rate&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;ratesId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rateTable ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;rateTable&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: false,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;rateTableId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
          &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;,&lt;br /&gt;
          &amp;quot;minLength&amp;quot;: 1&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;rateTableId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==RelationshipSchemas==&lt;br /&gt;
&lt;br /&gt;
=== hasRates ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;rateTable&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;rates&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== disableRates ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;rateTable&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;rates&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deliversToLocationNode ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;rateTable&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== disabledDeliversTolocationNode ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;rateTable&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= DynamoDB tables =&lt;br /&gt;
&lt;br /&gt;
== [[Standard Config Table Per Service]] ==&lt;br /&gt;
&lt;br /&gt;
=== Configuration tags ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configTag: &amp;quot;ProductGraphServiceName&amp;quot;&lt;br /&gt;
	configKey: &amp;quot;ProductGraphServiceName&amp;quot;&lt;br /&gt;
	configValue: xxx // eg: &amp;quot;ProductGraph&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LogicalResultsMain ==&lt;br /&gt;
[[Standard LogicalResults Per Service|LogicalResultsMain]]&lt;br /&gt;
&lt;br /&gt;
== LogicalResultsData ==&lt;br /&gt;
[[Standard LogicalResults Per Service|LogicalResultsData]]&lt;br /&gt;
&lt;br /&gt;
== LogicalAwaitingStep ==&lt;br /&gt;
[[Standard LogicalResults Per Service|LogicalAwaitingStep]]&lt;br /&gt;
&lt;br /&gt;
= Graph database = &lt;br /&gt;
&lt;br /&gt;
== [[Service - Products Graph]]==&lt;br /&gt;
&lt;br /&gt;
=== Nodes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{DeliveryMethodRateTableLib.RATETABLE_GRAPH_NODE_LABEL}&amp;quot;, // &amp;quot;rateTable&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		identifier: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		restrictRelationships: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			rateTableId: {&lt;br /&gt;
				identifier: true, // create unique id from request params and uniqueMessageId&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioned data ===&lt;br /&gt;
&lt;br /&gt;
==== rateTableRates ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	properties: {&lt;br /&gt;
		rates: [&lt;br /&gt;
			{&lt;br /&gt;
				type: &amp;quot;setRate&amp;quot;,&lt;br /&gt;
				upToValue: xx, // numeric value that this setRate goes up to&lt;br /&gt;
				rate: xx, // numeric rate&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				type: &amp;quot;increment&amp;quot;,&lt;br /&gt;
				upToValue: xx, // numeric value that this setRate goes up to&lt;br /&gt;
				ratePerIncrement: xx, // numeric amount that rate increases per increment&lt;br /&gt;
				increment: xx, // numeric incremental amount&lt;br /&gt;
			},&lt;br /&gt;
			// ..&lt;br /&gt;
		],&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Relationships ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;{DeliveryMethodStandardLib.createHasDeliveryMethodRateTableGraphRelationshipType()}&amp;quot;, // &amp;quot;deliversTo_locationNode&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		elementCanBeRemoved: true,&lt;br /&gt;
		allPropertiesImmutable: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			originTimestamp: //timestamp the request to create/change this relationship was sent&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;{DeliveryMethodStandardLib.createDisabledDeliveryMethodRateTableGraphRelationshipType()}&amp;quot;, // &amp;quot;disabledDeliversTo_locationNode&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		elementCanBeRemoved: true,&lt;br /&gt;
		allPropertiesImmutable: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			originTimestamp: //timestamp the request to create/change this relationship was sent&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* enable/disable links to locationNodes&lt;br /&gt;
* after a locationNode relationship is added to a RateTable it always remains as either one of the above relationships, in order to maintain history of changes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;adjustDeliversTo_performedBy&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		elementCanBeRemoved: false,&lt;br /&gt;
		allPropertiesImmutable: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			originTimestamp: //timestamp the request to create/change this relationship was sent&lt;br /&gt;
			locationNodeId: &lt;br /&gt;
			action: // &amp;quot;added&amp;quot;|&amp;quot;enabled&amp;quot;|&amp;quot;disabled&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* adds a relationship record between rateTable node and user whenever delivers to relationship added or removed&lt;br /&gt;
&lt;br /&gt;
= Data structure notes =&lt;br /&gt;
&lt;br /&gt;
* multiple deliveryMethods could point to a single rateTable&lt;br /&gt;
&lt;br /&gt;
= Complex Filter requests =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	filterType: &amp;quot;deliveryMethodRateTable&amp;quot; //unique id is rateTableId&lt;br /&gt;
	type: &amp;quot;group&amp;quot;,&lt;br /&gt;
	elements:&lt;br /&gt;
	[&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			logicalTag: &amp;quot;deliverToLocationId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			// finds all rateTables that has at &amp;gt;=1 has_deliveryMethodRateTable incomming relationship from give sellOfferPlanDeliveryMethodLinkId&lt;br /&gt;
			type: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			logicalTag: &amp;quot;activeSellOfferPlanDeliveryMethodLinkId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;&lt;br /&gt;
		},	&lt;br /&gt;
		{&lt;br /&gt;
			// finds all rateTables that has at &amp;gt;=1 has_deliveryMethodRateTable incomming relationship&lt;br /&gt;
			type: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			logicalTag: &amp;quot;isEnabled&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;true&amp;quot;,&lt;br /&gt;
		},		&lt;br /&gt;
		...&lt;br /&gt;
	]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Delivery Method Rate Table|Delivery Method Rate Table]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Delivery Method Rate Table]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Variant_Standard&amp;diff=3962</id>
		<title>Service - Variant Standard</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Variant_Standard&amp;diff=3962"/>
		<updated>2026-01-13T08:40:19Z</updated>

		<summary type="html">&lt;p&gt;Jammy: /* disabledVariantProductLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handler service for the standard variant type.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-variant-standard/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== variantStandard ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;extendObjType&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;variant&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;VariantRecord&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantId&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;,&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantProductLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantProductLink&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantProductLinkId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;hashOnCreate&amp;quot;: [&lt;br /&gt;
        &amp;quot;variantId&amp;quot;,&lt;br /&gt;
        &amp;quot;productId&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;variantId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;productId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantProductLinkId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantAttributeValueStandard ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValueStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;extendObjType&amp;quot;: {&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValue&amp;quot;,&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== hasVariantProductLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantProductLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantStandard&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== disabledVariantProductLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantProductLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantStandard&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Variant Standard|Variant Standard]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Variant Standard]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Variant_Standard&amp;diff=3961</id>
		<title>Service - Variant Standard</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Variant_Standard&amp;diff=3961"/>
		<updated>2026-01-13T08:39:50Z</updated>

		<summary type="html">&lt;p&gt;Jammy: /* hasVariantProductLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handler service for the standard variant type.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-variant-standard/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== variantStandard ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;extendObjType&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;variant&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;VariantRecord&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantId&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;,&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantProductLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantProductLink&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantProductLinkId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;hashOnCreate&amp;quot;: [&lt;br /&gt;
        &amp;quot;variantId&amp;quot;,&lt;br /&gt;
        &amp;quot;productId&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;variantId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;productId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantProductLinkId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantAttributeValueStandard ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValueStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;extendObjType&amp;quot;: {&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValue&amp;quot;,&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== hasVariantProductLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantProductLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantStandard&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== disabledVariantProductLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantProductLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantStandard&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Variant Standard|Variant Standard]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Variant Standard]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Variant_Manager&amp;diff=3960</id>
		<title>Service - Variant Manager</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Variant_Manager&amp;diff=3960"/>
		<updated>2026-01-13T08:37:20Z</updated>

		<summary type="html">&lt;p&gt;Jammy: /* disabledVariantAttributeLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Each product is handled by a [[Service - Variant (handlers)]] service.&lt;br /&gt;
&lt;br /&gt;
The Variant Manager service handles shared orchestration of Variant Handler services.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-variant-manager/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== variant ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variant&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;VariantRecord&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;variantHandlerServiceNameTag&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantAttributeLabelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantAttributeLabelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantAttributeLinkId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantAttributeLinkId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantAttributeValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValue&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantAttributeValueId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantAttributeValueId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== isVariantAttribute ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== isVariantAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLabel&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== hasVariantAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variant&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== disabledVariantAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
  &lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variant&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TranslateIdsCache ==&lt;br /&gt;
&lt;br /&gt;
Stores a record for any unique translateId process&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	cacheId // fromType + &amp;quot;_&amp;quot; + fromDataId + &amp;quot;_&amp;quot; + toType&lt;br /&gt;
	toDataId&lt;br /&gt;
	expireTime&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: cacheId&lt;br /&gt;
* sort key: toDataId&lt;br /&gt;
* expireTime is set as an automatic DynamoDB TTL attibute&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Variant Manager|Variant Manager]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Variant Manager]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Variant_Manager&amp;diff=3959</id>
		<title>Service - Variant Manager</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Variant_Manager&amp;diff=3959"/>
		<updated>2026-01-13T08:36:48Z</updated>

		<summary type="html">&lt;p&gt;Jammy: /* hasVariantAttributeLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Each product is handled by a [[Service - Variant (handlers)]] service.&lt;br /&gt;
&lt;br /&gt;
The Variant Manager service handles shared orchestration of Variant Handler services.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-variant-manager/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== variant ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variant&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;VariantRecord&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;variantHandlerServiceNameTag&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantAttributeLabelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantAttributeLabelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantAttributeLinkId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantAttributeLinkId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantAttributeValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValue&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantAttributeValueId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantAttributeValueId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== isVariantAttribute ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== isVariantAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLabel&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== hasVariantAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variant&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== disabledVariantAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variant&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TranslateIdsCache ==&lt;br /&gt;
&lt;br /&gt;
Stores a record for any unique translateId process&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	cacheId // fromType + &amp;quot;_&amp;quot; + fromDataId + &amp;quot;_&amp;quot; + toType&lt;br /&gt;
	toDataId&lt;br /&gt;
	expireTime&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: cacheId&lt;br /&gt;
* sort key: toDataId&lt;br /&gt;
* expireTime is set as an automatic DynamoDB TTL attibute&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Variant Manager|Variant Manager]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Variant Manager]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Variant_Manager&amp;diff=3958</id>
		<title>Service - Variant Manager</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Variant_Manager&amp;diff=3958"/>
		<updated>2026-01-13T08:36:20Z</updated>

		<summary type="html">&lt;p&gt;Jammy: /* isVariantAttributeLabel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Each product is handled by a [[Service - Variant (handlers)]] service.&lt;br /&gt;
&lt;br /&gt;
The Variant Manager service handles shared orchestration of Variant Handler services.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-variant-manager/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== variant ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variant&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;VariantRecord&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;variantHandlerServiceNameTag&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantAttributeLabelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantAttributeLabelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantAttributeLinkId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantAttributeLinkId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantAttributeValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValue&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantAttributeValueId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantAttributeValueId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== isVariantAttribute ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== isVariantAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLabel&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== hasVariantAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variant&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== disabledVariantAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variant&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TranslateIdsCache ==&lt;br /&gt;
&lt;br /&gt;
Stores a record for any unique translateId process&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	cacheId // fromType + &amp;quot;_&amp;quot; + fromDataId + &amp;quot;_&amp;quot; + toType&lt;br /&gt;
	toDataId&lt;br /&gt;
	expireTime&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: cacheId&lt;br /&gt;
* sort key: toDataId&lt;br /&gt;
* expireTime is set as an automatic DynamoDB TTL attibute&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Variant Manager|Variant Manager]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Variant Manager]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Variant_Manager&amp;diff=3957</id>
		<title>Service - Variant Manager</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Variant_Manager&amp;diff=3957"/>
		<updated>2026-01-13T08:35:55Z</updated>

		<summary type="html">&lt;p&gt;Jammy: /* isVariantAttribute */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Each product is handled by a [[Service - Variant (handlers)]] service.&lt;br /&gt;
&lt;br /&gt;
The Variant Manager service handles shared orchestration of Variant Handler services.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-variant-manager/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== variant ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variant&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;VariantRecord&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;variantHandlerServiceNameTag&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantAttributeLabelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantAttributeLabelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantAttributeLinkId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantAttributeLinkId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantAttributeValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValue&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantAttributeValueId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantAttributeValueId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== isVariantAttribute ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== isVariantAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLabel&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== hasVariantAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variant&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== disabledVariantAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variant&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TranslateIdsCache ==&lt;br /&gt;
&lt;br /&gt;
Stores a record for any unique translateId process&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	cacheId // fromType + &amp;quot;_&amp;quot; + fromDataId + &amp;quot;_&amp;quot; + toType&lt;br /&gt;
	toDataId&lt;br /&gt;
	expireTime&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: cacheId&lt;br /&gt;
* sort key: toDataId&lt;br /&gt;
* expireTime is set as an automatic DynamoDB TTL attibute&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Variant Manager|Variant Manager]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Variant Manager]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Product_Attributes&amp;diff=3956</id>
		<title>Service - Product Attributes</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Product_Attributes&amp;diff=3956"/>
		<updated>2026-01-13T08:34:37Z</updated>

		<summary type="html">&lt;p&gt;Jammy: /* disabledProductAttributeLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Manages Product Attributes and ProductAttributeLinks. Product Attributes can be shared by many Products, ProductAttributeLinks are used to create an attribute tree for one Product.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-product-attributes/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== productAttribute ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productAttributeId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;productAttributeId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== productAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productAttributeLinkId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;productAttributeLinkId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== productAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;labelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;labelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== isProductAttribute ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== isProductAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLabel&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== hasProductAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledProductAttributeLink&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== disabledProductAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasProductAttributeLink&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Product Attributes|Product Attributes]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Product Attributes]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Product_Attributes&amp;diff=3955</id>
		<title>Service - Product Attributes</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Product_Attributes&amp;diff=3955"/>
		<updated>2026-01-13T08:34:15Z</updated>

		<summary type="html">&lt;p&gt;Jammy: /* hasProductAttributeLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Manages Product Attributes and ProductAttributeLinks. Product Attributes can be shared by many Products, ProductAttributeLinks are used to create an attribute tree for one Product.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-product-attributes/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== productAttribute ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productAttributeId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;productAttributeId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== productAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productAttributeLinkId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;productAttributeLinkId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== productAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;labelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;labelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== isProductAttribute ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== isProductAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLabel&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== hasProductAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledProductAttributeLink&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== disabledProductAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasProductAttributeLink&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Product Attributes|Product Attributes]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Product Attributes]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Product_Attributes&amp;diff=3954</id>
		<title>Service - Product Attributes</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Product_Attributes&amp;diff=3954"/>
		<updated>2026-01-13T08:33:54Z</updated>

		<summary type="html">&lt;p&gt;Jammy: /* isProductAttributeLabel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Manages Product Attributes and ProductAttributeLinks. Product Attributes can be shared by many Products, ProductAttributeLinks are used to create an attribute tree for one Product.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-product-attributes/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== productAttribute ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productAttributeId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;productAttributeId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== productAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productAttributeLinkId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;productAttributeLinkId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== productAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;labelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;labelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== isProductAttribute ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== isProductAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLabel&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== hasProductAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledProductAttributeLink&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== disabledProductAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasProductAttributeLink&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Product Attributes|Product Attributes]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Product Attributes]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Product_Attributes&amp;diff=3953</id>
		<title>Service - Product Attributes</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Product_Attributes&amp;diff=3953"/>
		<updated>2026-01-13T08:33:29Z</updated>

		<summary type="html">&lt;p&gt;Jammy: /* isProductAttribute */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Manages Product Attributes and ProductAttributeLinks. Product Attributes can be shared by many Products, ProductAttributeLinks are used to create an attribute tree for one Product.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-product-attributes/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== productAttribute ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productAttributeId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;productAttributeId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== productAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productAttributeLinkId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;productAttributeLinkId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== productAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;labelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;labelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== isProductAttribute ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== isProductAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLabel&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== hasProductAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledProductAttributeLink&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== disabledProductAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasProductAttributeLink&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Product Attributes|Product Attributes]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Product Attributes]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Product_Standard&amp;diff=3952</id>
		<title>Service - Product Standard</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Product_Standard&amp;diff=3952"/>
		<updated>2026-01-13T08:29:10Z</updated>

		<summary type="html">&lt;p&gt;Jammy: /* isProduct */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handler service for the standard product type.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-product-standard/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== productStandard ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;extendObjType&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;product&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productId&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== isProduct ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantProductLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Product Standard|Product Standard]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Product Standard]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Product_Manager&amp;diff=3951</id>
		<title>Service - Product Manager</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Product_Manager&amp;diff=3951"/>
		<updated>2026-01-13T08:28:05Z</updated>

		<summary type="html">&lt;p&gt;Jammy: /* isProduct */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Each product is handled by a [[Service - Product (handlers)]] service.&lt;br /&gt;
&lt;br /&gt;
The Product Manager service handles shared orchestration of the Product Handler services.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-product-manager/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== product ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;product&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;productId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== productRecord ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productRecord&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;propertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;productHandlerServiceNameTag&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;productId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== isProduct ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantProductLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Product Manager|Product Manager]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Product Manager]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Product_Attributes&amp;diff=3903</id>
		<title>Service - Product Attributes</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Product_Attributes&amp;diff=3903"/>
		<updated>2026-01-07T03:50:48Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Manages Product Attributes and ProductAttributeLinks. Product Attributes can be shared by many Products, ProductAttributeLinks are used to create an attribute tree for one Product.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-product-attributes/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== productAttribute ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productAttributeId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;productAttributeId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== productAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productAttributeLinkId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;productAttributeLinkId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== productAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;labelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;labelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== isProductAttribute ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== isProductAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLabel&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== hasProductAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledProductAttributeLink&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== disabledProductAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasProductAttributeLink&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Product Attributes|Product Attributes]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Product Attributes]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Delivery_Method_Pickup_Table&amp;diff=3901</id>
		<title>Service - Delivery Method Pickup Table</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Delivery_Method_Pickup_Table&amp;diff=3901"/>
		<updated>2026-01-06T09:45:23Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handler service for pickup location tables, works similar to rateTable, the same values can be used to calculate value for price ladder, each pickupTable instance has a list of locationIds which is where the order can be picked up from.&lt;br /&gt;
&lt;br /&gt;
This allows a seller with multiple branches to charge delivery fee depending on which branch the order gets picked up from.&lt;br /&gt;
&lt;br /&gt;
When doing deepPath search for matching locationIds use the buyer supplied locationIds to find all children locationIds to find matching pickupLocation tables.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-services/izara-market-products-delivery-method-pickup-table&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
== Object Schemas ==&lt;br /&gt;
=== deliveryMethodPickupTable ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethodPickupTable&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: false,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;pickupTableId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
          &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;,&lt;br /&gt;
          &amp;quot;minLength&amp;quot;: 1&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;pickupTableId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Relationships ==&lt;br /&gt;
&lt;br /&gt;
=== atLocation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;atLocation&amp;quot;: {&lt;br /&gt;
		canChangeToRelTypes: [&lt;br /&gt;
			{&lt;br /&gt;
				serviceTag:&amp;quot;deliveryMethodPickupTable&amp;quot;,&lt;br /&gt;
				relationshipTag: &amp;quot;disabledAtLocation&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
		],&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;graphHandler&amp;quot;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;deliveryMethodPickupTable&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;deliveryMethodPickupTable&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;locations&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;location&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
					handler: true&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== disabledAtLocation ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;disabledAtLocation&amp;quot;: {&lt;br /&gt;
		canChangeToRelTypes: [&lt;br /&gt;
			{&lt;br /&gt;
				serviceTag:&amp;quot;deliveryMethodPickupTable&amp;quot;,&lt;br /&gt;
				relationshipTag: &amp;quot;atLocation&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
		],&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;graphHandler&amp;quot;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;deliveryMethodPickupTable&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;deliveryMethodPickupTable&amp;quot;	&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;locations&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;location&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
					handler: true&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Delivery Method Pickup Table|Delivery Method Pickup Table]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Delivery Method Pickup Table]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Delivery_Method_Pickup&amp;diff=3900</id>
		<title>Service - Delivery Method Pickup</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Delivery_Method_Pickup&amp;diff=3900"/>
		<updated>2026-01-06T09:42:49Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handler service for basic pickup that use [[Service - Delivery Method Pickup Table]] for pricing and specifying pickup locations.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-services/izara-market-products-delivery-method-pickup&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
&lt;br /&gt;
== ObjectSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== deliveryMethodPickup ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethodPickup&amp;quot;,&lt;br /&gt;
  &amp;quot;extendObjType&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodMgr&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethod&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;DeliveryMethodRecord&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodMgr&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;versionedData&amp;quot;,&lt;br /&gt;
      &amp;quot;versionedDataLabel&amp;quot;: &amp;quot;deliveryMethodSettings&amp;quot;,&lt;br /&gt;
      &amp;quot;storageResourceTag&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
        &amp;quot;defaultValueType&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
          &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
          &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
          &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
          &amp;quot;validation&amp;quot;: {&lt;br /&gt;
            &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;defaultValueId&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
          &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
          &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
          &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
          &amp;quot;validation&amp;quot;: {&lt;br /&gt;
            &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;defaultValueLanguageId&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
          &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
          &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
          &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
          &amp;quot;validation&amp;quot;: {&lt;br /&gt;
            &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;defaultAccumulateValue&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
          &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
          &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
          &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
          &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;propertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
* extends deliveryMethod&lt;br /&gt;
* has versionData similar to deliveryMethodStandard to add costs and set value for pickupTables&lt;br /&gt;
&lt;br /&gt;
== Object Relationships ==&lt;br /&gt;
=== hasDeliveryMethodPickupTable ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;hasDeliveryMethodPickupTable&amp;quot;: {&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;graphHandler&amp;quot;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;deliveryMethodPickup&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;deliveryMethodPickup&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;deliveryMethodPickupTable&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;deliveryMethodPickupTable&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
					handler: true&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== disabledDeliveryMethodPickupTable ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;disabledDeliveryMethodPickupTable&amp;quot;: {&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;graphHandler&amp;quot;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;deliveryMethodPickup&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;deliveryMethodPickup&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;deliveryMethodPickupTable&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;deliveryMethodPickupTable&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
					handler: true&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Delivery Method Pickup|Delivery Method Pickup]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Delivery Method Pickup]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Delivery_Method_Pickup_Table&amp;diff=3899</id>
		<title>Service - Delivery Method Pickup Table</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Delivery_Method_Pickup_Table&amp;diff=3899"/>
		<updated>2026-01-06T09:24:23Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handler service for pickup location tables, works similar to rateTable, the same values can be used to calculate value for price ladder, each pickupTable instance has a list of locationIds which is where the order can be picked up from.&lt;br /&gt;
&lt;br /&gt;
This allows a seller with multiple branches to charge delivery fee depending on which branch the order gets picked up from.&lt;br /&gt;
&lt;br /&gt;
When doing deepPath search for matching locationIds use the buyer supplied locationIds to find all children locationIds to find matching pickupLocation tables.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-services/izara-market-products-delivery-method-pickup-table&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
&lt;br /&gt;
=== deliveryMethodPickupTable ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;deliveryMethodPickupTable&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: false,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;pickupTableId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
          &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;,&lt;br /&gt;
          &amp;quot;minLength&amp;quot;: 1&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;pickupTableId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Relationships ==&lt;br /&gt;
&lt;br /&gt;
=== atLocation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;atLocation&amp;quot;: {&lt;br /&gt;
		canChangeToRelTypes: [&lt;br /&gt;
			{&lt;br /&gt;
				serviceTag:&amp;quot;deliveryMethodPickupTable&amp;quot;,&lt;br /&gt;
				relationshipTag: &amp;quot;disabledAtLocation&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
		],&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;graphHandler&amp;quot;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;deliveryMethodPickupTable&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;deliveryMethodPickupTable&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;locations&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;location&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
					handler: true&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== disabledAtLocation ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;disabledAtLocation&amp;quot;: {&lt;br /&gt;
		canChangeToRelTypes: [&lt;br /&gt;
			{&lt;br /&gt;
				serviceTag:&amp;quot;deliveryMethodPickupTable&amp;quot;,&lt;br /&gt;
				relationshipTag: &amp;quot;atLocation&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
		],&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;graphHandler&amp;quot;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;deliveryMethodPickupTable&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;deliveryMethodPickupTable&amp;quot;	&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;locations&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;location&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
					handler: true&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Delivery Method Pickup Table|Delivery Method Pickup Table]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Delivery Method Pickup Table]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Delivery_Method_Pickup_Table&amp;diff=3898</id>
		<title>Service - Delivery Method Pickup Table</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Delivery_Method_Pickup_Table&amp;diff=3898"/>
		<updated>2026-01-06T09:08:23Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handler service for pickup location tables, works similar to rateTable, the same values can be used to calculate value for price ladder, each pickupTable instance has a list of locationIds which is where the order can be picked up from.&lt;br /&gt;
&lt;br /&gt;
This allows a seller with multiple branches to charge delivery fee depending on which branch the order gets picked up from.&lt;br /&gt;
&lt;br /&gt;
When doing deepPath search for matching locationIds use the buyer supplied locationIds to find all children locationIds to find matching pickupLocation tables.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-services/izara-market-products-delivery-method-pickup-table&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== objType ==&lt;br /&gt;
&lt;br /&gt;
=== deliveryMethodPickupTable ===&lt;br /&gt;
&lt;br /&gt;
* has ladder of prices same as rateTable&lt;br /&gt;
&lt;br /&gt;
== Object Relationships ==&lt;br /&gt;
&lt;br /&gt;
=== atLocation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;atLocation&amp;quot;: {&lt;br /&gt;
		canChangeToRelTypes: [&lt;br /&gt;
			{&lt;br /&gt;
				serviceTag:&amp;quot;deliveryMethodPickupTable&amp;quot;,&lt;br /&gt;
				relationshipTag: &amp;quot;disabledAtLocation&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
		],&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;graphHandler&amp;quot;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;deliveryMethodPickupTable&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;deliveryMethodPickupTable&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;locations&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;location&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
					handler: true&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== disabledAtLocation ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;disabledAtLocation&amp;quot;: {&lt;br /&gt;
		canChangeToRelTypes: [&lt;br /&gt;
			{&lt;br /&gt;
				serviceTag:&amp;quot;deliveryMethodPickupTable&amp;quot;,&lt;br /&gt;
				relationshipTag: &amp;quot;atLocation&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
		],&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;graphHandler&amp;quot;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;deliveryMethodPickupTable&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;deliveryMethodPickupTable&amp;quot;	&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;locations&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;location&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
					handler: true&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Delivery Method Pickup Table|Delivery Method Pickup Table]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Delivery Method Pickup Table]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Variant_Standard&amp;diff=3897</id>
		<title>Service - Variant Standard</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Variant_Standard&amp;diff=3897"/>
		<updated>2026-01-06T09:05:21Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handler service for the standard variant type.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-variant-standard/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== variantStandard ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;extendObjType&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;variant&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;VariantRecord&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantId&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;,&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantProductLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantProductLink&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantProductLinkId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;hashOnCreate&amp;quot;: [&lt;br /&gt;
        &amp;quot;variantId&amp;quot;,&lt;br /&gt;
        &amp;quot;productId&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;variantId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;productId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantProductLinkId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantAttributeValueStandard ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValueStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;extendObjType&amp;quot;: {&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValue&amp;quot;,&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== hasVariantProductLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantProductLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantStandard&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== disabledVariantProductLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantProductLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantStandard&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Variant Standard|Variant Standard]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Variant Standard]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Variant_Manager&amp;diff=3896</id>
		<title>Service - Variant Manager</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Variant_Manager&amp;diff=3896"/>
		<updated>2026-01-06T08:39:15Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Each product is handled by a [[Service - Variant (handlers)]] service.&lt;br /&gt;
&lt;br /&gt;
The Variant Manager service handles shared orchestration of Variant Handler services.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-variant-manager/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== variant ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variant&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;VariantRecord&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;variantHandlerServiceNameTag&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantAttributeLabelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantAttributeLabelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantAttributeLinkId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantAttributeLinkId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantAttributeValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValue&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantAttributeValueId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantAttributeValueId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== isVariantAttribute ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== isVariantAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLabel&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== hasVariantAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variant&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== disabledVariantAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variant&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TranslateIdsCache ==&lt;br /&gt;
&lt;br /&gt;
Stores a record for any unique translateId process&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	cacheId // fromType + &amp;quot;_&amp;quot; + fromDataId + &amp;quot;_&amp;quot; + toType&lt;br /&gt;
	toDataId&lt;br /&gt;
	expireTime&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: cacheId&lt;br /&gt;
* sort key: toDataId&lt;br /&gt;
* expireTime is set as an automatic DynamoDB TTL attibute&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Variant Manager|Variant Manager]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Variant Manager]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Payment_Method_Generic&amp;diff=3895</id>
		<title>Service - Payment Method Generic</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Payment_Method_Generic&amp;diff=3895"/>
		<updated>2026-01-06T08:31:25Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handler service for generic payment methods that give text instruction to buyer at completion of sale. userPaymentMethod is also handled by each Payment Method Handler because there will be unique settings depending on the Payment Method.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-payment-method-generic/src/master/&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
===paymentMethodGeneric===&lt;br /&gt;
*ExtendObjType:paymentMethod&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;extendObjType&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodManager&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethod&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;propertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;PaymentMethodRecords&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodManager&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== userPaymentMethodGeneric ===&lt;br /&gt;
*ExtendObjType:userPaymentMethod&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;extendObjType&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodManager&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethod&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;propertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;UserPaymentMethodsRecords&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodManager&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== userPaymentMethodGenericSalePropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyValue&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;userPaymentMethodGenericSalePropertyValueId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyValueId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== userPaymentMethodGenericSalePropertyLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;userPaymentMethodGenericSalePropertyLabelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyLabelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''property'''&lt;br /&gt;
=== paymentMethodGenericPropertyLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGenericPropertyLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;paymentMethodGenericPropertyLabelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;paymentMethodGenericPropertyLabelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== paymentMethodGenericPropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;paymentMethodGenericPropertyValueId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;paymentMethodGenericPropertyValueId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== userPaymentMethodGenericPropertyLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;userPaymentMethodGenericPropertyLabelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyLabelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== userPaymentMethodGenericPropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;userPaymentMethodGenericPropertyValueId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyValueId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==RelationshipSchemas==&lt;br /&gt;
&lt;br /&gt;
=== disabledPaymentMethodGenericPropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGeneric&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: true&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
        {  &lt;br /&gt;
          serviceTag:&amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
          relationshipTag: &amp;quot;hasPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== disabledUserPaymentMethodGenericPropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGeneric&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
   &lt;br /&gt;
  &amp;quot;canMove&amp;quot;: true&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== disabledUserPaymentMethodGenericSalePropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGeneric&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasUserPaymentMethodGenericSalePropertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== hasPaymentMethodGenericPropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGeneric&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== hasUserPaymentMethodGenericPropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGeneric&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledUserPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== hasUserPaymentMethodGenericSalePropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGeneric&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledUserPaymentMethodGenericSalePropertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== isPaymentMethodGenericPropertyLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGenericPropertyLabel&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== isUserPaymentMethodGenericPropertyLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyLabel&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== isUserPaymentMethodGenericSalePropertyLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyLabel&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic node schemas ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{PaymentMethodGenericLib.PAYMENTMETHOD_GRAPH_NODE_LABEL}&amp;quot;, // &amp;quot;paymentMethod&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		identifier: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		restrictRelationships: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			paymentMethodId: {&lt;br /&gt;
				identifier: true,&lt;br /&gt;
			},&lt;br /&gt;
			paymentMethodHandlerServiceNameTag: {&lt;br /&gt;
				immutable: true,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [[Service - Translations Graph]]&lt;br /&gt;
* [[Service - Orders Graph]]&lt;br /&gt;
&lt;br /&gt;
=== Schema comes from [[NPM module - Izara Core - Property Node|BasicNodeSchemaLib]] ===&lt;br /&gt;
&lt;br /&gt;
# paymentMethodPropertyLabel&lt;br /&gt;
#* [[Service - Translations Graph]]&lt;br /&gt;
# paymentMethodProperty&lt;br /&gt;
#* [[Service - Translations Graph]]&lt;br /&gt;
# paymentMethodSalePropertyLabel&lt;br /&gt;
#* [[Service - Translations Graph]]&lt;br /&gt;
# paymentMethodSaleProperty&lt;br /&gt;
#* [[Service - Translations Graph]]&lt;br /&gt;
&lt;br /&gt;
= Complex Filter requests =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	filterType: &amp;quot;handlerPaymentMethod&amp;quot; //unique id is paymentMethodId&lt;br /&gt;
	type: &amp;quot;group&amp;quot;,&lt;br /&gt;
	elements:&lt;br /&gt;
	[&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			logicalTag: &amp;quot;currencyId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;complexFilter&amp;quot;,&lt;br /&gt;
			complexFilter: {&lt;br /&gt;
				filterType: &amp;quot;paymentMethodProperty&amp;quot;,&lt;br /&gt;
				// see [[NPM module - Izara Core - Property Node|Complex Filter requests]]&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;complexFilter&amp;quot;,&lt;br /&gt;
			complexFilter: {&lt;br /&gt;
				filterType: &amp;quot;paymentMethodNameTranslation&amp;quot; //unique id is paymentMethodId&lt;br /&gt;
				type: &amp;quot;group&amp;quot;,&lt;br /&gt;
				elements: &lt;br /&gt;
				[&lt;br /&gt;
					{&lt;br /&gt;
						// see [[Service - Translations|Complex Filter requests]]&lt;br /&gt;
						type: &amp;quot;logical&amp;quot;,&lt;br /&gt;
						logicalTag: &amp;quot;textTag_languageId_text&amp;quot;,&lt;br /&gt;
						resultType: &amp;quot;paymentMethod&amp;quot;,&lt;br /&gt;
						textTag: &amp;quot;paymentMethodName&amp;quot;,&lt;br /&gt;
						languageId: &amp;quot;en&amp;quot;,&lt;br /&gt;
						text: &amp;quot;Is a great term&amp;quot;,&lt;br /&gt;
						subjectIdentifierPropertyName: &amp;quot;paymentMethodId&amp;quot;,&lt;br /&gt;
						caseSensitive: true&lt;br /&gt;
					},&lt;br /&gt;
				]&lt;br /&gt;
			}&lt;br /&gt;
		},		&lt;br /&gt;
		...&lt;br /&gt;
	]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	filterType: &amp;quot;handlerUserPaymentMethod&amp;quot; //unique id is userPaymentMethodId&lt;br /&gt;
	type: &amp;quot;group&amp;quot;,&lt;br /&gt;
	elements:&lt;br /&gt;
	[&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			logicalTag: &amp;quot;paymentMethodId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;complexFilter&amp;quot;,&lt;br /&gt;
			complexFilter: {&lt;br /&gt;
				filterType: &amp;quot;paymentMethod&amp;quot;,&lt;br /&gt;
				// see above&lt;br /&gt;
			}&lt;br /&gt;
		},		&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;complexFilter&amp;quot;,&lt;br /&gt;
			complexFilter: {&lt;br /&gt;
				filterType: &amp;quot;userPaymentMethodProperty&amp;quot;,&lt;br /&gt;
				// see [[NPM module - Izara Core - Property Node|Complex Filter requests]]&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;complexFilter&amp;quot;,&lt;br /&gt;
			complexFilter: {&lt;br /&gt;
				filterType: &amp;quot;userPaymentMethodSaleProperty&amp;quot;,&lt;br /&gt;
				// see [[NPM module - Izara Core - Property Node|Complex Filter requests]]&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		...&lt;br /&gt;
	]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Data structure notes =&lt;br /&gt;
&lt;br /&gt;
* Users can create new paymentMethods which are uniquely identified by their translation&lt;br /&gt;
* Users can create userPaymentMethod nodes for their account which connect to paymentMethods, one user can have multiple userPaymentMethod links to the same paymentMethod, eg different Bank Transfer nodes for different bank accounts, which can be applied to sell offers in any combination&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Payment Method Generic|Payment Method Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Payment Method Generic]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Payment_Method_Manager&amp;diff=3894</id>
		<title>Service - Payment Method Manager</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Payment_Method_Manager&amp;diff=3894"/>
		<updated>2026-01-06T08:16:47Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Each payment method is handled by a [[Service - Payment Method (handlers)]] service, with [[Service - Payment Method Generic]] taking all new/simple payment methods.&lt;br /&gt;
&lt;br /&gt;
The Payment Method Manager service handles shared orchestration of the Payment Method Handler services.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-payment-method-manager/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
===paymentMethod===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethod&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: false,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;PaymentMethodRecords&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodManager&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;paymentMethodId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&amp;quot;dynamoDB&amp;quot;,&amp;quot;graph&amp;quot;],&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
          &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;paymentMethodHandlerServiceNameTag&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&amp;quot;dynamoDB&amp;quot;],&lt;br /&gt;
      &amp;quot;validation&amp;quot;: { &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;}}&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;currencyId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&amp;quot;dynamoDB&amp;quot;],&lt;br /&gt;
      &amp;quot;validation&amp;quot;: { &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;}}&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;paymentMethodId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; inline&amp;gt;currencyId&amp;lt;/syntaxhighlight&amp;gt;:is uuid and connect translations declere currency eg:&amp;quot;THB&amp;quot; ect.&lt;br /&gt;
&lt;br /&gt;
=== userPaymentMethod ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethod&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: false,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;UserPaymentMethodsRecords&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodManager&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;userPaymentMethodId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;}&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;paymentMethodHandlerServiceNameTag&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;}&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;userPaymentMethodId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== isPaymentMethod ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodManager&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethod&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodManager&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethod&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Payment Method Manager|Payment Method Manager]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Payment Method Manager]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Locations&amp;diff=3893</id>
		<title>Service - Locations</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Locations&amp;diff=3893"/>
		<updated>2026-01-06T07:52:36Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Manages Location Graph&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-core-locations/izara-core-locations-locations/src/master/&lt;br /&gt;
&lt;br /&gt;
= ObjectSchemas =&lt;br /&gt;
=== LocationType ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;locationType&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;locationTypeId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;locationTypeId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LocationNode ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;locationNode&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;locationNodeId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;locationNodeId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LocationLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;locationNode&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;locationNodeId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;locationNodeId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= RelationshipSchemas =&lt;br /&gt;
=== hasLocationLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== isLocationNode ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== isLocationType ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationType&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Translations = &lt;br /&gt;
&lt;br /&gt;
== locationNode ==&lt;br /&gt;
&lt;br /&gt;
* given name of the location, eg: Bangkok&lt;br /&gt;
&lt;br /&gt;
== locationType ==&lt;br /&gt;
&lt;br /&gt;
* description of the type of label, eg: Country&lt;br /&gt;
* see note about about adding a second translation textTag for presentation text, because locationType translation is used to create locationTypeId, so if want to split Post Codes for different countries into their own locationTypes will need to have unique text (eg: &amp;quot;Post Code (USA)&amp;quot;, but might want to present with same text (eg: &amp;quot;Post Code&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
= Using locationNodeIds to search for sell offers =&lt;br /&gt;
&lt;br /&gt;
* Sellers set where they ship to, setting more inclusive ship to locationNodeIds is best (if it matches their actual service) because will be included in all searches for lower level locationNodeIds&lt;br /&gt;
* Buyers set where they are so can see sell offers that ship there, best to be as low level/specific as possible because will search sell offers for all matching parents&lt;br /&gt;
* Buyers can use their address which will find all parent locationNodeIds for all locationNodeIds in their address, or buyers can choose specific locationNodeId/s, eg a country when not signed in, this would return less results as will only return sell offers that specify they can ship anywhere in that country&lt;br /&gt;
&lt;br /&gt;
== Possible optimization when finding matching parents ==&lt;br /&gt;
&lt;br /&gt;
* eg: when given a set of locationNodeIds from a buyer's address, we find all parent locationNodeIds and use this list to filter ship to locationNodeIds to find sell offers that ship to this buyer. This can result in a large number of queries&lt;br /&gt;
* this will be mitigated a lot by our cached complex filter and search results, but is still a lot of processing&lt;br /&gt;
* in all cases, all nodes set in an address would be searched for, these optimizations are for finding additional parents for checking&lt;br /&gt;
* we could reduce the filtering work by reducing the number of parent locationNodeIds&lt;br /&gt;
* one way is to only accept parent links that meet a certain weight, eg reach a limit of how many times they have been used as a parent in user addresses. Problem with this is lower level links will have less links, and just because a link is used little does not make it invalid&lt;br /&gt;
* another way is to curate the types of parent links to search for, eg only accept certain chains of links, such as city &amp;gt; post code &amp;gt; state, any parent nodes that do not match this chain are ignored. Would probably need to know the country beforehand to set the accepted chains. Additional processing to handle this might outweigh the gains&lt;br /&gt;
* another is to have curated parents, user entry (eg by a low level admin role) sets which are real links worth checking&lt;br /&gt;
* new plan: set only one locationNodeId as used by an address to calculate the chain of parent locationNodeIds, default is the lowest level node, but allow per address to choose which node&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Locations|Locations]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Locations]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Product_Attributes&amp;diff=3892</id>
		<title>Service - Product Attributes</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Product_Attributes&amp;diff=3892"/>
		<updated>2026-01-06T07:39:56Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Manages Product Attributes and ProductAttributeLinks. Product Attributes can be shared by many Products, ProductAttributeLinks are used to create an attribute tree for one Product.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-product-attributes/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== productAttribute ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productAttributeId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;productAttributeId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== productAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productAttributeLinkId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;productAttributeLinkId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== productAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;labelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;labelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== isProductAttribute ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== isProductAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLabel&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== hasProductAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledProductAttributeLink&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== disabledProductAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasProductAttributeLink&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic node schemas ==&lt;br /&gt;
&lt;br /&gt;
Schema comes from [[NPM module - Izara Core - Attribute Tree|BasicNodeSchemaLib]]&lt;br /&gt;
&lt;br /&gt;
# {ProductAttributesLib.PRODUCT_ATTRIBUTE_GRAPH_NODE_LABEL}Label&lt;br /&gt;
#* [[Service - Translations Graph]]&lt;br /&gt;
# {ProductAttributesLib.PRODUCT_ATTRIBUTE_GRAPH_NODE_LABEL}&lt;br /&gt;
#* [[Service - Media Graph]]&lt;br /&gt;
#* [[Service - Translations Graph]]&lt;br /&gt;
# {ProductAttributesLib.PRODUCT_ATTRIBUTE_GRAPH_NODE_LABEL}PropertyLabel&lt;br /&gt;
#* [[Service - Translations Graph]]&lt;br /&gt;
# {ProductAttributesLib.PRODUCT_ATTRIBUTE_GRAPH_NODE_LABEL}Property&lt;br /&gt;
#* [[Service - Translations Graph]]&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Product Attributes|Product Attributes]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Product Attributes]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Product_Manager&amp;diff=3891</id>
		<title>Service - Product Manager</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Product_Manager&amp;diff=3891"/>
		<updated>2026-01-06T07:32:40Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Each product is handled by a [[Service - Product (handlers)]] service.&lt;br /&gt;
&lt;br /&gt;
The Product Manager service handles shared orchestration of the Product Handler services.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-product-manager/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== product ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;product&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;productId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== productRecord ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productRecord&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;propertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;productHandlerServiceNameTag&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;productId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== isProduct ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantProductLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Product Manager|Product Manager]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Product Manager]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Product_Standard&amp;diff=3890</id>
		<title>Service - Product Standard</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Product_Standard&amp;diff=3890"/>
		<updated>2026-01-06T07:15:44Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handler service for the standard product type.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-product-standard/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== productStandard ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;extendObjType&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;product&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productId&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== isProduct ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantProductLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Product Standard|Product Standard]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Product Standard]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Product_Attributes&amp;diff=3749</id>
		<title>Service - Product Attributes</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Product_Attributes&amp;diff=3749"/>
		<updated>2025-12-23T08:01:01Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Manages Product Attributes and ProductAttributeLinks. Product Attributes can be shared by many Products, ProductAttributeLinks are used to create an attribute tree for one Product.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-product-attributes/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== productAttribute ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productAttributeId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;productAttributeId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== productAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productAttributeLinkId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;productAttributeLinkId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== productAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;labelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;labelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== isProductAttribute ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== isProductAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLabel&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== hasProductAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledProductAttributeLink&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== disabledProductAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimestamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;mainGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;mainGraph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasProductAttributeLink&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= DynamoDB tables =&lt;br /&gt;
&lt;br /&gt;
== [[Standard Config Table Per Service]] ==&lt;br /&gt;
&lt;br /&gt;
=== Configuration tags ===&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
== LogicalResults ==&lt;br /&gt;
&lt;br /&gt;
Stores results for any requests to perform logical searches on media links&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	resultId: xxx // eg: filterMainId for a single logical element&lt;br /&gt;
	dataId: xxx // one productAttributeLinkId&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: resultId&lt;br /&gt;
* sort key: dataId&lt;br /&gt;
&lt;br /&gt;
= Graph database = &lt;br /&gt;
&lt;br /&gt;
== [[Service - Products Graph]]==&lt;br /&gt;
&lt;br /&gt;
=== Nodes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{ProductAttributesLib.PRODUCT_ATTRIBUTE_GRAPH_NODE_LABEL}Label&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{ProductAttributesLib.PRODUCT_ATTRIBUTE_GRAPH_NODE_LABEL}&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{ProductAttributesLib.PRODUCT_ATTRIBUTE_GRAPH_NODE_LABEL}Link&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{ProductAttributesLib.PRODUCT_ATTRIBUTE_GRAPH_NODE_LABEL}PropertyLabel&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{ProductAttributesLib.PRODUCT_ATTRIBUTE_GRAPH_NODE_LABEL}Property&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* see [[NPM module - Izara Core - Attribute Tree|DataSchemaLib]]&lt;br /&gt;
&lt;br /&gt;
=== Relationships ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;has_{ProductAttributesLib.PRODUCT_ATTRIBUTE_GRAPH_NODE_LABEL}Link&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;disabled_{ProductAttributesLib.PRODUCT_ATTRIBUTE_GRAPH_NODE_LABEL}Link&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;is_{ProductAttributesLib.PRODUCT_ATTRIBUTE_GRAPH_NODE_LABEL}&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;is_{ProductAttributesLib.PRODUCT_ATTRIBUTE_GRAPH_NODE_LABEL}Label&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;has_{ProductAttributesLib.PRODUCT_ATTRIBUTE_GRAPH_NODE_LABEL}Property&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;disabled_{ProductAttributesLib.PRODUCT_ATTRIBUTE_GRAPH_NODE_LABEL}Property&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;is_{ProductAttributesLib.PRODUCT_ATTRIBUTE_GRAPH_NODE_LABEL}PropertyLabel&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* see [[NPM module - Izara Core - Attribute Tree|DataSchemaLib]]&lt;br /&gt;
&lt;br /&gt;
== Basic node schemas ==&lt;br /&gt;
&lt;br /&gt;
Schema comes from [[NPM module - Izara Core - Attribute Tree|BasicNodeSchemaLib]]&lt;br /&gt;
&lt;br /&gt;
# {ProductAttributesLib.PRODUCT_ATTRIBUTE_GRAPH_NODE_LABEL}Label&lt;br /&gt;
#* [[Service - Translations Graph]]&lt;br /&gt;
# {ProductAttributesLib.PRODUCT_ATTRIBUTE_GRAPH_NODE_LABEL}&lt;br /&gt;
#* [[Service - Media Graph]]&lt;br /&gt;
#* [[Service - Translations Graph]]&lt;br /&gt;
# {ProductAttributesLib.PRODUCT_ATTRIBUTE_GRAPH_NODE_LABEL}PropertyLabel&lt;br /&gt;
#* [[Service - Translations Graph]]&lt;br /&gt;
# {ProductAttributesLib.PRODUCT_ATTRIBUTE_GRAPH_NODE_LABEL}Property&lt;br /&gt;
#* [[Service - Translations Graph]]&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Product Attributes|Product Attributes]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Product Attributes]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Variant_Standard&amp;diff=3748</id>
		<title>Service - Variant Standard</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Variant_Standard&amp;diff=3748"/>
		<updated>2025-12-23T07:36:09Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handler service for the standard variant type.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-variant-standard/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== variantStandard ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;extendObjType&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;variant&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;VariantRecord&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantId&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;,&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantProductLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantProductLink&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantProductLinkId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;hashOnCreate&amp;quot;: [&lt;br /&gt;
        &amp;quot;variantId&amp;quot;,&lt;br /&gt;
        &amp;quot;productId&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;variantId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;productId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantProductLinkId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantAttributeValueStandard ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValueStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;extendObjType&amp;quot;: {&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValue&amp;quot;,&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== hasVariantProductLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantProductLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantStandard&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== disabledVariantProductLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantProductLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantStandard&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= DynamoDB tables =&lt;br /&gt;
&lt;br /&gt;
== [[Standard Config Table Per Service]] ==&lt;br /&gt;
&lt;br /&gt;
=== Configuration tags ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configTag: &amp;quot;VariantHandlerServiceNameTag&amp;quot;&lt;br /&gt;
	configKey: &amp;quot;VariantHandlerServiceNameTag&amp;quot;&lt;br /&gt;
	configValue: xxx // this own services ServiceNameTag, eg &amp;quot;VariantStandard&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configTag: &amp;quot;ProductGraphServiceName&amp;quot;&lt;br /&gt;
	configKey: &amp;quot;ProductGraphServiceName&amp;quot;&lt;br /&gt;
	configValue: xxx // eg: &amp;quot;ProductGraph&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configTag: &amp;quot;VariantManagerServiceName&amp;quot;&lt;br /&gt;
	configKey: &amp;quot;VariantManagerServiceName&amp;quot;&lt;br /&gt;
	configValue: xxx // eg: &amp;quot;ProductManager&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LogicalResults ==&lt;br /&gt;
&lt;br /&gt;
Stores results for any requests to perform logical searches on variant data&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	resultId: xxx // eg: filterMainId for a single logical element&lt;br /&gt;
	dataId: xxx // one variantId&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: resultId&lt;br /&gt;
* sort key: dataId&lt;br /&gt;
&lt;br /&gt;
= Graph database = &lt;br /&gt;
&lt;br /&gt;
== [[Service - Products Graph]]==&lt;br /&gt;
&lt;br /&gt;
=== Nodes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{VariantStandardLib.VARIANT_GRAPH_NODE_LABEL}&amp;quot;,&lt;br /&gt;
	schema: {&lt;br /&gt;
		identifier: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		restrictRelationships: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			variantId: {&lt;br /&gt;
				identifier: true, //(random uuid)&lt;br /&gt;
			},&lt;br /&gt;
			variantHandlerServiceNameTag: {&lt;br /&gt;
				immutable: true,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{VariantStandardLib.VARIANT_PRODUCT_LINK_GRAPH_NODE_LABEL}&amp;quot;,&lt;br /&gt;
	schema: {&lt;br /&gt;
		identifier: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		restrictRelationships: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			variantId: {&lt;br /&gt;
				identifier: true,&lt;br /&gt;
			},&lt;br /&gt;
			variantHandlerServiceNameTag: {&lt;br /&gt;
				immutable: true,&lt;br /&gt;
			},&lt;br /&gt;
			productId: {&lt;br /&gt;
				identifier: true,&lt;br /&gt;
			},&lt;br /&gt;
			productHandlerServiceNameTag: {&lt;br /&gt;
				immutable: true,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* adds a node between each variant to product relationship, we do this so we can add variantProductLink specific relationships, eg to media that only relates to this link, not to other parent variants the product has&lt;br /&gt;
&lt;br /&gt;
=== Relationships ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;{VariantStandardLib.createHasVariantProductLinkGraphRelationshipType()}&amp;quot;, // &amp;quot;has_variantProductLink&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		elementCanBeRemoved: true,&lt;br /&gt;
		allPropertiesImmutable: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			originTimestamp: //timestamp the request to create/change this relationship was sent&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;{VariantStandardLib.createDisabledVariantProductLinkGraphRelationshipType()}&amp;quot;, //&amp;quot;disabled_variantProductLink&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		elementCanBeRemoved: true,&lt;br /&gt;
		allPropertiesImmutable: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			originTimestamp: //timestamp the request to create/change this relationship was sent&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* links variant to a variantProductLink, or a variantProductLink to a product&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Variant Standard|Variant Standard]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Variant Standard]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Variant_Manager&amp;diff=3747</id>
		<title>Service - Variant Manager</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Variant_Manager&amp;diff=3747"/>
		<updated>2025-12-23T07:22:48Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Each product is handled by a [[Service - Variant (handlers)]] service.&lt;br /&gt;
&lt;br /&gt;
The Variant Manager service handles shared orchestration of Variant Handler services.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-variant-manager/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== variant ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variant&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;VariantRecord&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;variantHandlerServiceNameTag&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantAttributeLabelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantAttributeLabelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantAttributeLinkId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantAttributeLinkId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== variantAttributeValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValue&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;variantAttributeValueId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;variantAttributeValueId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== isVariantAttribute ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== isVariantAttributeLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLabel&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== hasVariantAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variant&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== disabledVariantAttributeLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variant&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantAttributeLink&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantManager&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= DynamoDB tables =&lt;br /&gt;
&lt;br /&gt;
== [[Standard Config Table Per Service]] ==&lt;br /&gt;
&lt;br /&gt;
=== Configuration tags ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configKey: &amp;quot;ProductGraphServiceName&amp;quot;&lt;br /&gt;
	configTag: &amp;quot;ProductGraphServiceName&amp;quot;&lt;br /&gt;
	configValue: xxx // eg: &amp;quot;ProductGraph&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configKey: &amp;quot;VariantHandlerService&amp;quot;&lt;br /&gt;
	configTag: xxx // variantHandlerServiceNameTag, eg: &amp;quot;VariantStandard&amp;quot;, this is what is saved in each catalog record&lt;br /&gt;
	configValue: {&lt;br /&gt;
		serviceName: xxx // eg: &amp;quot;VariantStandard&amp;quot;, this is the actual deployed service name}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configKey: &amp;quot;TranslateIdsType&amp;quot;&lt;br /&gt;
	configTag: xxx // eg SellOffer &amp;gt; Product would be sellOffer_product&lt;br /&gt;
	configValue: {&lt;br /&gt;
		ttl: 64000 // number of seconds TranslateIdsCache records live for&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== VariantRecord ==&lt;br /&gt;
&lt;br /&gt;
Records which Handler manages each variant&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	variantId&lt;br /&gt;
	variantHandlerServiceNameTag&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: variantId&lt;br /&gt;
* sort key: (none)&lt;br /&gt;
&lt;br /&gt;
== TranslateIdsCache ==&lt;br /&gt;
&lt;br /&gt;
Stores a record for any unique translateId process&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	cacheId // fromType + &amp;quot;_&amp;quot; + fromDataId + &amp;quot;_&amp;quot; + toType&lt;br /&gt;
	toDataId&lt;br /&gt;
	expireTime&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: cacheId&lt;br /&gt;
* sort key: toDataId&lt;br /&gt;
* expireTime is set as an automatic DynamoDB TTL attibute&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Variant Manager|Variant Manager]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Variant Manager]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Product_Standard&amp;diff=3746</id>
		<title>Service - Product Standard</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Product_Standard&amp;diff=3746"/>
		<updated>2025-12-23T07:06:12Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handler service for the standard product type.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-product-standard/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== productStandard ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;extendObjType&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;product&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productId&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== isProduct ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantProductLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= DynamoDB tables =&lt;br /&gt;
&lt;br /&gt;
== [[Standard Config Table Per Service]] ==&lt;br /&gt;
&lt;br /&gt;
=== Configuration tags ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configTag: &amp;quot;ProductHandlerServiceNameTag&amp;quot;&lt;br /&gt;
	configKey: &amp;quot;ProductHandlerServiceNameTag&amp;quot;&lt;br /&gt;
	configValue: xxx // this own services ServiceNameTag, eg &amp;quot;ProductStandard&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configTag: &amp;quot;ProductGraphServiceName&amp;quot;&lt;br /&gt;
	configKey: &amp;quot;ProductGraphServiceName&amp;quot;&lt;br /&gt;
	configValue: xxx // eg: &amp;quot;ProductGraph&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configTag: &amp;quot;ProductManagerServiceName&amp;quot;&lt;br /&gt;
	configKey: &amp;quot;ProductManagerServiceName&amp;quot;&lt;br /&gt;
	configValue: xxx // eg: &amp;quot;ProductManager&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LogicalResults ==&lt;br /&gt;
&lt;br /&gt;
Stores results for any requests to perform logical searches on product data&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	resultId: xxx // eg: filterMainId for a single logical element&lt;br /&gt;
	dataId: xxx // one productId&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: resultId&lt;br /&gt;
* sort key: dataId&lt;br /&gt;
&lt;br /&gt;
= Graph database = &lt;br /&gt;
&lt;br /&gt;
== [[Service - Products Graph]]==&lt;br /&gt;
&lt;br /&gt;
=== Nodes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{ProductStandardLib.PRODUCT_GRAPH_NODE_LABEL}&amp;quot;,&lt;br /&gt;
	schema: {&lt;br /&gt;
		identifier: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		restrictRelationships: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			productId: {&lt;br /&gt;
				identifier: true, //(random uuid)&lt;br /&gt;
			},&lt;br /&gt;
			productHandlerServiceNameTag: {&lt;br /&gt;
				immutable: true,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic node schemas ==&lt;br /&gt;
&lt;br /&gt;
=== product ===&lt;br /&gt;
&lt;br /&gt;
[[Service - Media Graph]]&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Product Standard|Product Standard]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Product Standard]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Product_Standard&amp;diff=3745</id>
		<title>Service - Product Standard</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Product_Standard&amp;diff=3745"/>
		<updated>2025-12-23T07:03:37Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handler service for the standard product type.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-product-standard/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== productStandard ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;,&lt;br /&gt;
  &amp;quot;extendObjType&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;product&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productId&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== productRecord ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productRecord&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;propertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;productHandlerServiceNameTag&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;productId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== isProduct ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantProductLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= DynamoDB tables =&lt;br /&gt;
&lt;br /&gt;
== [[Standard Config Table Per Service]] ==&lt;br /&gt;
&lt;br /&gt;
=== Configuration tags ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configTag: &amp;quot;ProductHandlerServiceNameTag&amp;quot;&lt;br /&gt;
	configKey: &amp;quot;ProductHandlerServiceNameTag&amp;quot;&lt;br /&gt;
	configValue: xxx // this own services ServiceNameTag, eg &amp;quot;ProductStandard&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configTag: &amp;quot;ProductGraphServiceName&amp;quot;&lt;br /&gt;
	configKey: &amp;quot;ProductGraphServiceName&amp;quot;&lt;br /&gt;
	configValue: xxx // eg: &amp;quot;ProductGraph&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configTag: &amp;quot;ProductManagerServiceName&amp;quot;&lt;br /&gt;
	configKey: &amp;quot;ProductManagerServiceName&amp;quot;&lt;br /&gt;
	configValue: xxx // eg: &amp;quot;ProductManager&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LogicalResults ==&lt;br /&gt;
&lt;br /&gt;
Stores results for any requests to perform logical searches on product data&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	resultId: xxx // eg: filterMainId for a single logical element&lt;br /&gt;
	dataId: xxx // one productId&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: resultId&lt;br /&gt;
* sort key: dataId&lt;br /&gt;
&lt;br /&gt;
= Graph database = &lt;br /&gt;
&lt;br /&gt;
== [[Service - Products Graph]]==&lt;br /&gt;
&lt;br /&gt;
=== Nodes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{ProductStandardLib.PRODUCT_GRAPH_NODE_LABEL}&amp;quot;,&lt;br /&gt;
	schema: {&lt;br /&gt;
		identifier: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		restrictRelationships: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			productId: {&lt;br /&gt;
				identifier: true, //(random uuid)&lt;br /&gt;
			},&lt;br /&gt;
			productHandlerServiceNameTag: {&lt;br /&gt;
				immutable: true,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic node schemas ==&lt;br /&gt;
&lt;br /&gt;
=== product ===&lt;br /&gt;
&lt;br /&gt;
[[Service - Media Graph]]&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Product Standard|Product Standard]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Product Standard]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Product_Manager&amp;diff=3744</id>
		<title>Service - Product Manager</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Product_Manager&amp;diff=3744"/>
		<updated>2025-12-23T06:46:32Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Each product is handled by a [[Service - Product (handlers)]] service.&lt;br /&gt;
&lt;br /&gt;
The Product Manager service handles shared orchestration of the Product Handler services.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-product-manager/src/master/&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== product ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;product&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;productId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== productRecord ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;productRecord&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;propertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;productId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;productHandlerServiceNameTag&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;dynamoDB&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;productId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
=== isProduct ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;VariantStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;variantProductLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= DynamoDB tables =&lt;br /&gt;
&lt;br /&gt;
== [[Standard Config Table Per Service]] ==&lt;br /&gt;
&lt;br /&gt;
=== Configuration tags ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configKey: &amp;quot;ProductGraphServiceName&amp;quot;&lt;br /&gt;
	configTag: &amp;quot;ProductGraphServiceName&amp;quot;&lt;br /&gt;
	configValue: xxx // eg: &amp;quot;ProductGraph&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configKey: &amp;quot;ProductHandlerService&amp;quot;&lt;br /&gt;
	configTag: xxx // productHandlerServiceNameTag, eg: &amp;quot;ProductStandard&amp;quot;, this is what is saved in each catalog record&lt;br /&gt;
	configValue: {&lt;br /&gt;
		serviceName: xxx // eg: &amp;quot;ProductStandard&amp;quot;, this is the actual deployed service name}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ProductRecord ==&lt;br /&gt;
&lt;br /&gt;
Records which Handler manages each product&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	productId&lt;br /&gt;
	productHandlerServiceNameTag&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: productId&lt;br /&gt;
* sort key: (none)&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Product Manager|Product Manager]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Product Manager]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Delivery_Method_Rate_Table&amp;diff=3741</id>
		<title>Service - Delivery Method Rate Table</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Delivery_Method_Rate_Table&amp;diff=3741"/>
		<updated>2025-12-19T10:27:56Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Manages delivery rate tables for delivery methods (possible other objects). Rate tables combine set rates at a certain value with increment settings to easily maintain rate table calculations.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-delivery-method-rate-table&lt;br /&gt;
&lt;br /&gt;
= Schemas =&lt;br /&gt;
&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
=== rates ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;rates&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: false,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;ratesId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
          &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;,&lt;br /&gt;
          &amp;quot;minLength&amp;quot;: 1&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;upToValue&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;rate&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;ratesId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rateTable ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;rateTable&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: false,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;rateTableId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
          &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;,&lt;br /&gt;
          &amp;quot;minLength&amp;quot;: 1&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;rateTableId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==RelationshipSchemas==&lt;br /&gt;
&lt;br /&gt;
=== hasRates ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;rateTable&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;rates&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== disableRates ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;rateTable&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;rates&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== deliversToLocationNode ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;rateTable&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== disabledDeliversTolocationNode ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;DeliveryMethodRAT&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;rateTable&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= DynamoDB tables =&lt;br /&gt;
&lt;br /&gt;
== [[Standard Config Table Per Service]] ==&lt;br /&gt;
&lt;br /&gt;
=== Configuration tags ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configTag: &amp;quot;ProductGraphServiceName&amp;quot;&lt;br /&gt;
	configKey: &amp;quot;ProductGraphServiceName&amp;quot;&lt;br /&gt;
	configValue: xxx // eg: &amp;quot;ProductGraph&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LogicalResultsMain ==&lt;br /&gt;
[[Standard LogicalResults Per Service|LogicalResultsMain]]&lt;br /&gt;
&lt;br /&gt;
== LogicalResultsData ==&lt;br /&gt;
[[Standard LogicalResults Per Service|LogicalResultsData]]&lt;br /&gt;
&lt;br /&gt;
== LogicalAwaitingStep ==&lt;br /&gt;
[[Standard LogicalResults Per Service|LogicalAwaitingStep]]&lt;br /&gt;
&lt;br /&gt;
= Graph database = &lt;br /&gt;
&lt;br /&gt;
== [[Service - Products Graph]]==&lt;br /&gt;
&lt;br /&gt;
=== Nodes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{DeliveryMethodRateTableLib.RATETABLE_GRAPH_NODE_LABEL}&amp;quot;, // &amp;quot;rateTable&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		identifier: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		restrictRelationships: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			rateTableId: {&lt;br /&gt;
				identifier: true, // create unique id from request params and uniqueMessageId&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioned data ===&lt;br /&gt;
&lt;br /&gt;
==== rateTableRates ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	properties: {&lt;br /&gt;
		rates: [&lt;br /&gt;
			{&lt;br /&gt;
				type: &amp;quot;setRate&amp;quot;,&lt;br /&gt;
				upToValue: xx, // numeric value that this setRate goes up to&lt;br /&gt;
				rate: xx, // numeric rate&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				type: &amp;quot;increment&amp;quot;,&lt;br /&gt;
				upToValue: xx, // numeric value that this setRate goes up to&lt;br /&gt;
				ratePerIncrement: xx, // numeric amount that rate increases per increment&lt;br /&gt;
				increment: xx, // numeric incremental amount&lt;br /&gt;
			},&lt;br /&gt;
			// ..&lt;br /&gt;
		],&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Relationships ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;{DeliveryMethodStandardLib.createHasDeliveryMethodRateTableGraphRelationshipType()}&amp;quot;, // &amp;quot;deliversTo_locationNode&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		elementCanBeRemoved: true,&lt;br /&gt;
		allPropertiesImmutable: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			originTimestamp: //timestamp the request to create/change this relationship was sent&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;{DeliveryMethodStandardLib.createDisabledDeliveryMethodRateTableGraphRelationshipType()}&amp;quot;, // &amp;quot;disabledDeliversTo_locationNode&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		elementCanBeRemoved: true,&lt;br /&gt;
		allPropertiesImmutable: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			originTimestamp: //timestamp the request to create/change this relationship was sent&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* enable/disable links to locationNodes&lt;br /&gt;
* after a locationNode relationship is added to a RateTable it always remains as either one of the above relationships, in order to maintain history of changes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;adjustDeliversTo_performedBy&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		elementCanBeRemoved: false,&lt;br /&gt;
		allPropertiesImmutable: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			originTimestamp: //timestamp the request to create/change this relationship was sent&lt;br /&gt;
			locationNodeId: &lt;br /&gt;
			action: // &amp;quot;added&amp;quot;|&amp;quot;enabled&amp;quot;|&amp;quot;disabled&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* adds a relationship record between rateTable node and user whenever delivers to relationship added or removed&lt;br /&gt;
&lt;br /&gt;
= Data structure notes =&lt;br /&gt;
&lt;br /&gt;
* multiple deliveryMethods could point to a single rateTable&lt;br /&gt;
&lt;br /&gt;
= Complex Filter requests =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	filterType: &amp;quot;deliveryMethodRateTable&amp;quot; //unique id is rateTableId&lt;br /&gt;
	type: &amp;quot;group&amp;quot;,&lt;br /&gt;
	elements:&lt;br /&gt;
	[&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			logicalTag: &amp;quot;deliverToLocationId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			// finds all rateTables that has at &amp;gt;=1 has_deliveryMethodRateTable incomming relationship from give sellOfferPlanDeliveryMethodLinkId&lt;br /&gt;
			type: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			logicalTag: &amp;quot;activeSellOfferPlanDeliveryMethodLinkId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;&lt;br /&gt;
		},	&lt;br /&gt;
		{&lt;br /&gt;
			// finds all rateTables that has at &amp;gt;=1 has_deliveryMethodRateTable incomming relationship&lt;br /&gt;
			type: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			logicalTag: &amp;quot;isEnabled&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;true&amp;quot;,&lt;br /&gt;
		},		&lt;br /&gt;
		...&lt;br /&gt;
	]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Delivery Method Rate Table|Delivery Method Rate Table]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Delivery Method Rate Table]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Payment_Method_Generic&amp;diff=3740</id>
		<title>Service - Payment Method Generic</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Payment_Method_Generic&amp;diff=3740"/>
		<updated>2025-12-19T09:27:43Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handler service for generic payment methods that give text instruction to buyer at completion of sale. userPaymentMethod is also handled by each Payment Method Handler because there will be unique settings depending on the Payment Method.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-market-products/izara-market-products-payment-method-generic/src/master/&lt;br /&gt;
= Schemas =&lt;br /&gt;
==ObjectSchemas==&lt;br /&gt;
===paymentMethodGeneric===&lt;br /&gt;
*ExtendObjType:paymentMethod&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;extendObjType&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodManager&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethod&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;propertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;PaymentMethodRecords&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodManager&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== userPaymentMethodGeneric ===&lt;br /&gt;
*ExtendObjType:userPaymentMethod&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;extendObjType&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodManager&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethod&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;propertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;dynamoDB&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;UserPaymentMethodsRecords&amp;quot;,&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodManager&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {},&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== userPaymentMethodGenericSalePropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyValue&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;userPaymentMethodGenericSalePropertyValueId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyValueId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== userPaymentMethodGenericSalePropertyLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;userPaymentMethodGenericSalePropertyLabelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyLabelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''property'''&lt;br /&gt;
=== paymentMethodGenericPropertyLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGenericPropertyLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;paymentMethodGenericPropertyLabelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;paymentMethodGenericPropertyLabelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== paymentMethodGenericPropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;paymentMethodGenericPropertyValueId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;paymentMethodGenericPropertyValueId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== userPaymentMethodGenericPropertyLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyLabel&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;userPaymentMethodGenericPropertyLabelId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyLabelId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== userPaymentMethodGenericPropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;userPaymentMethodGenericPropertyValueId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9-_]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyValueId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==RelationshipSchemas==&lt;br /&gt;
&lt;br /&gt;
=== disabledPaymentMethodGenericPropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGeneric&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: true&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
        {  &lt;br /&gt;
          serviceTag:&amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
          relationshipTag: &amp;quot;hasPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== disabledUserPaymentMethodGenericPropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGeneric&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
   &lt;br /&gt;
  &amp;quot;canMove&amp;quot;: true&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== disabledUserPaymentMethodGenericSalePropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGeneric&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasUserPaymentMethodGenericSalePropertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== hasPaymentMethodGenericPropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGeneric&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== hasUserPaymentMethodGenericPropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGeneric&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledUserPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== hasUserPaymentMethodGenericSalePropertyValue ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGeneric&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canChangeToRelTypes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
      &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledUserPaymentMethodGenericSalePropertyValue&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== isPaymentMethodGenericPropertyLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;paymentMethodGenericPropertyLabel&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== isUserPaymentMethodGenericPropertyLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericPropertyLabel&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== isUserPaymentMethodGenericSalePropertyLabel ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyValue&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;userPaymentMethodGenericSalePropertyLabel&amp;quot;,&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;direction&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= DynamoDB tables =&lt;br /&gt;
&lt;br /&gt;
== [[Standard Config Table Per Service]] ==&lt;br /&gt;
&lt;br /&gt;
=== Configuration tags ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configTag: &amp;quot;PaymentMethodHandlerServiceNameTag&amp;quot;&lt;br /&gt;
	configKey: &amp;quot;PaymentMethodHandlerServiceNameTag&amp;quot;&lt;br /&gt;
	configValue: xxx // this own services ServiceNameTag, eg &amp;quot;PaymentMethodGeneric&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configTag: &amp;quot;ProductGraphServiceName&amp;quot;&lt;br /&gt;
	configKey: &amp;quot;ProductGraphServiceName&amp;quot;&lt;br /&gt;
	configValue: xxx // eg: &amp;quot;ProductGraph&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configTag: &amp;quot;PaymentMethodManagerServiceName&amp;quot;&lt;br /&gt;
	configKey: &amp;quot;PaymentMethodManagerServiceName&amp;quot;&lt;br /&gt;
	configValue: xxx // eg: &amp;quot;PaymentMethodManager&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Graph database = &lt;br /&gt;
&lt;br /&gt;
== [[Service - Products Graph]]==&lt;br /&gt;
&lt;br /&gt;
=== Nodes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;paymentMethodGeneric&amp;quot;,&lt;br /&gt;
	schema: {&lt;br /&gt;
		identifier: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		restrictRelationships: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			paymentMethodId: {&lt;br /&gt;
				identifier: true, // create unique id from translation&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{PaymentMethodManagerLib.USERPAYMENTMETHOD_GRAPH_NODE_LABEL}&amp;quot;, // &amp;quot;userPaymentMethod&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		identifier: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		restrictRelationships: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			userPaymentMethodId: {&lt;br /&gt;
				identifier: true, // create unique id from user and uniqueMessageId&lt;br /&gt;
			},&lt;br /&gt;
			paymentMethodId: { // stored here to reduce queries finding matching methods, eg sellOffers&lt;br /&gt;
				immutable: true,&lt;br /&gt;
			},&lt;br /&gt;
			userPaymentMethodTag: { // users reference name for this userPaymentMethod&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* adds a node between a user and a payment method&lt;br /&gt;
* this is the node linked to by sellOfferPlans&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{PaymentMethodGenericLib.PAYMENTMETHOD_GRAPH_NODE_LABEL}PropertyLabel&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{PaymentMethodGenericLib.PAYMENTMETHOD_GRAPH_NODE_LABEL}Property&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{PaymentMethodGenericLib.USERPAYMENTMETHOD_GRAPH_NODE_LABEL}PropertyLabel&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{PaymentMethodGenericLib.USERPAYMENTMETHOD_GRAPH_NODE_LABEL}Property&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{PaymentMethodGenericLib.USERPAYMENTMETHOD_SALE_PROPERTIES_GRAPH_TAG}PropertyLabel&amp;quot;, // userPaymentMethodSalePropertyLabel&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{PaymentMethodGenericLib.USERPAYMENTMETHOD_SALE_PROPERTIES_GRAPH_TAG}Property&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* see [[NPM module - Izara Core - Property Node|DataSchemaLib]]&lt;br /&gt;
* two sets of property nodes for userPaymentMethod, one for presentation properties (when browsing), paymentMethodSale for after sale, properties that get sent to the buyer, eg bank account number&lt;br /&gt;
&lt;br /&gt;
=== Relationships ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;{PaymentMethodManagerLib.createIsPaymentMethodGraphRelationshipType()}&amp;quot;, // &amp;quot;is_paymentMethod&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		elementCanBeRemoved: false,&lt;br /&gt;
		allPropertiesImmutable: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			originTimestamp: //timestamp the request to create/change this relationship was sent&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;{PaymentMethodManagerLib.createIsUserPaymentMethodGraphRelationshipType()}&amp;quot;, // &amp;quot;is_userPaymentMethod&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		elementCanBeRemoved: false,&lt;br /&gt;
		allPropertiesImmutable: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			originTimestamp: //timestamp the request to create/change this relationship was sent&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* not setup logic to disable userPaymentMethods at this time&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;has_{PaymentMethodGenericLib.PAYMENTMETHOD_GRAPH_NODE_LABEL}Property&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;disabled_{PaymentMethodGenericLib.PAYMENTMETHOD_GRAPH_NODE_LABEL}Property&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;is_{PaymentMethodGenericLib.PAYMENTMETHOD_GRAPH_NODE_LABEL}PropertyLabel&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;has_{PaymentMethodGenericLib.USERPAYMENTMETHOD_GRAPH_NODE_LABEL}Property&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;disabled_{PaymentMethodGenericLib.USERPAYMENTMETHOD_GRAPH_NODE_LABEL}Property&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;is_{PaymentMethodGenericLib.USERPAYMENTMETHOD_GRAPH_NODE_LABEL}PropertyLabel&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;has_{PaymentMethodGenericLib.USERPAYMENTMETHOD_SALE_PROPERTIES_GRAPH_TAG}Property&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;disabled_{PaymentMethodGenericLib.USERPAYMENTMETHOD_SALE_PROPERTIES_GRAPH_TAG}Property&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;is_{PaymentMethodGenericLib.USERPAYMENTMETHOD_SALE_PROPERTIES_GRAPH_TAG}PropertyLabel&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* see [[NPM module - Izara Core - Property Node|DataSchemaLib]]&lt;br /&gt;
&lt;br /&gt;
== Basic node schemas ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{PaymentMethodGenericLib.PAYMENTMETHOD_GRAPH_NODE_LABEL}&amp;quot;, // &amp;quot;paymentMethod&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		identifier: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		restrictRelationships: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			paymentMethodId: {&lt;br /&gt;
				identifier: true,&lt;br /&gt;
			},&lt;br /&gt;
			paymentMethodHandlerServiceNameTag: {&lt;br /&gt;
				immutable: true,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [[Service - Translations Graph]]&lt;br /&gt;
* [[Service - Orders Graph]]&lt;br /&gt;
&lt;br /&gt;
=== Schema comes from [[NPM module - Izara Core - Property Node|BasicNodeSchemaLib]] ===&lt;br /&gt;
&lt;br /&gt;
# paymentMethodPropertyLabel&lt;br /&gt;
#* [[Service - Translations Graph]]&lt;br /&gt;
# paymentMethodProperty&lt;br /&gt;
#* [[Service - Translations Graph]]&lt;br /&gt;
# paymentMethodSalePropertyLabel&lt;br /&gt;
#* [[Service - Translations Graph]]&lt;br /&gt;
# paymentMethodSaleProperty&lt;br /&gt;
#* [[Service - Translations Graph]]&lt;br /&gt;
&lt;br /&gt;
= Complex Filter requests =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	filterType: &amp;quot;handlerPaymentMethod&amp;quot; //unique id is paymentMethodId&lt;br /&gt;
	type: &amp;quot;group&amp;quot;,&lt;br /&gt;
	elements:&lt;br /&gt;
	[&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			logicalTag: &amp;quot;currencyId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;complexFilter&amp;quot;,&lt;br /&gt;
			complexFilter: {&lt;br /&gt;
				filterType: &amp;quot;paymentMethodProperty&amp;quot;,&lt;br /&gt;
				// see [[NPM module - Izara Core - Property Node|Complex Filter requests]]&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;complexFilter&amp;quot;,&lt;br /&gt;
			complexFilter: {&lt;br /&gt;
				filterType: &amp;quot;paymentMethodNameTranslation&amp;quot; //unique id is paymentMethodId&lt;br /&gt;
				type: &amp;quot;group&amp;quot;,&lt;br /&gt;
				elements: &lt;br /&gt;
				[&lt;br /&gt;
					{&lt;br /&gt;
						// see [[Service - Translations|Complex Filter requests]]&lt;br /&gt;
						type: &amp;quot;logical&amp;quot;,&lt;br /&gt;
						logicalTag: &amp;quot;textTag_languageId_text&amp;quot;,&lt;br /&gt;
						resultType: &amp;quot;paymentMethod&amp;quot;,&lt;br /&gt;
						textTag: &amp;quot;paymentMethodName&amp;quot;,&lt;br /&gt;
						languageId: &amp;quot;en&amp;quot;,&lt;br /&gt;
						text: &amp;quot;Is a great term&amp;quot;,&lt;br /&gt;
						subjectIdentifierPropertyName: &amp;quot;paymentMethodId&amp;quot;,&lt;br /&gt;
						caseSensitive: true&lt;br /&gt;
					},&lt;br /&gt;
				]&lt;br /&gt;
			}&lt;br /&gt;
		},		&lt;br /&gt;
		...&lt;br /&gt;
	]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	filterType: &amp;quot;handlerUserPaymentMethod&amp;quot; //unique id is userPaymentMethodId&lt;br /&gt;
	type: &amp;quot;group&amp;quot;,&lt;br /&gt;
	elements:&lt;br /&gt;
	[&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			logicalTag: &amp;quot;paymentMethodId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;complexFilter&amp;quot;,&lt;br /&gt;
			complexFilter: {&lt;br /&gt;
				filterType: &amp;quot;paymentMethod&amp;quot;,&lt;br /&gt;
				// see above&lt;br /&gt;
			}&lt;br /&gt;
		},		&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;complexFilter&amp;quot;,&lt;br /&gt;
			complexFilter: {&lt;br /&gt;
				filterType: &amp;quot;userPaymentMethodProperty&amp;quot;,&lt;br /&gt;
				// see [[NPM module - Izara Core - Property Node|Complex Filter requests]]&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;complexFilter&amp;quot;,&lt;br /&gt;
			complexFilter: {&lt;br /&gt;
				filterType: &amp;quot;userPaymentMethodSaleProperty&amp;quot;,&lt;br /&gt;
				// see [[NPM module - Izara Core - Property Node|Complex Filter requests]]&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		...&lt;br /&gt;
	]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Data structure notes =&lt;br /&gt;
&lt;br /&gt;
* Users can create new paymentMethods which are uniquely identified by their translation&lt;br /&gt;
* Users can create userPaymentMethod nodes for their account which connect to paymentMethods, one user can have multiple userPaymentMethod links to the same paymentMethod, eg different Bank Transfer nodes for different bank accounts, which can be applied to sell offers in any combination&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Payment Method Generic|Payment Method Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Payment Method Generic]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Locations&amp;diff=3739</id>
		<title>Service - Locations</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Locations&amp;diff=3739"/>
		<updated>2025-12-19T09:02:49Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Manages Location Graph&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-core-locations/izara-core-locations-locations/src/master/&lt;br /&gt;
&lt;br /&gt;
= ObjectSchemas =&lt;br /&gt;
=== LocationType ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;locationType&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;locationTypeId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;locationTypeId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LocationNode ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;locationNode&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;locationNodeId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;locationNodeId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LocationLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;locationNode&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;locationNodeId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;locationNodeId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= RelationshipSchemas =&lt;br /&gt;
=== hasLocationLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== isLocationNode ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== isLocationType ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;relationshipServiceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;originTimeStamp&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;relId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;generatedField&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;links&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;from&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: true,&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;many&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;to&amp;quot;: {&lt;br /&gt;
        &amp;quot;objType&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: &amp;quot;locationType&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;linkType&amp;quot;: &amp;quot;one&amp;quot;,&lt;br /&gt;
        &amp;quot;handler&amp;quot;: true,&lt;br /&gt;
        &amp;quot;requiredOnCreate&amp;quot;: false&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;canDelete&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;canMove&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= DynamoDB tables =&lt;br /&gt;
&lt;br /&gt;
== [[Standard Config Table Per Service]] ==&lt;br /&gt;
&lt;br /&gt;
=== Configuration tags ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configKey: &amp;quot;LocationsGraphServiceName&amp;quot;&lt;br /&gt;
	configTag: &amp;quot;LocationsGraphServiceName&amp;quot;&lt;br /&gt;
	configValue: xxx // eg: &amp;quot;Locations&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configKey: &amp;quot;TranslationGraphServiceName&amp;quot;&lt;br /&gt;
	configTag: &amp;quot;TranslationGraphServiceName&amp;quot;&lt;br /&gt;
	configValue: xxx // eg: &amp;quot;TranslationGraph&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Graph database = &lt;br /&gt;
&lt;br /&gt;
== [[Service - Locations Graph]]==&lt;br /&gt;
&lt;br /&gt;
=== Nodes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{LocationsSharedLib.LOCATIONNODE_GRAPH_NODE_LABEL}&amp;quot;, // &amp;quot;locationNode&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		identifier: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		restrictRelationships: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			locationNodeId: {&lt;br /&gt;
				identifier: true, // create unique id from translation and uniqueMessageId (because multiple locationNode can have same translation)&lt;br /&gt;
			},&lt;br /&gt;
			topLevel: {}, // true|false // now may be nodeLabel (extent)&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{LocationsSharedLib.LOCATIONTYPE_GRAPH_NODE_LABEL}&amp;quot;, // &amp;quot;locationType&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		identifier: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		restrictRelationships: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			locationTypeId: {&lt;br /&gt;
				identifier: true, // create unique id from translation&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Want to split eg postcodes for different countries into their own locationTypes, this will mean each has to have a different translation (two cannot be named &amp;quot;Post Code&amp;quot; or they will be considered the same label/use the same locationType node), for now use unique translations for each, but could add another translation as the presentation text, which is not used to identify the type, but when presenting the value&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{LocationsSharedLib.LOCATIONLINK_GRAPH_NODE_LABEL}&amp;quot;, // &amp;quot;locationLink&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		identifier: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		restrictRelationships: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			locationLinkId: {&lt;br /&gt;
				identifier: true, // create unique id from parent and child locationNode identifiers, because we only want one link to exist between two specific nodes&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Relationships ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;{LocationsSharedLib.HAS_LOCATIONLINK_GRAPH_REL_TYPE}&amp;quot;, // &amp;quot;has_locationLink&lt;br /&gt;
	schema: {&lt;br /&gt;
		elementCanBeRemoved: false,&lt;br /&gt;
		allPropertiesImmutable: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;{LocationsSharedLib.IS_LOCATIONNODE_GRAPH_REL_TYPE}&amp;quot;, // &amp;quot;is_locationNode&lt;br /&gt;
	schema: {&lt;br /&gt;
		elementCanBeRemoved: false,&lt;br /&gt;
		allPropertiesImmutable: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;{LocationsSharedLib.IS_LOCATIONTYPE_GRAPH_REL_TYPE}&amp;quot;, // &amp;quot;is_locationType&lt;br /&gt;
	schema: {&lt;br /&gt;
		elementCanBeRemoved: false,&lt;br /&gt;
		allPropertiesImmutable: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic node schemas ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{LocationsSharedLib.LOCATIONNODE_GRAPH_NODE_LABEL}&amp;quot;,&lt;br /&gt;
	schema: {&lt;br /&gt;
		identifier: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		restrictRelationships: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			locationNodeId: {&lt;br /&gt;
				identifier: true,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{LocationsSharedLib.LOCATIONTYPE_GRAPH_NODE_LABEL}&amp;quot;,&lt;br /&gt;
	schema: {&lt;br /&gt;
		identifier: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		restrictRelationships: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			locationTypeId: {&lt;br /&gt;
				identifier: true,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Complex Filter requests =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	filterType: &amp;quot;locationNode&amp;quot; //unique id is locationNodeId&lt;br /&gt;
	type: &amp;quot;group&amp;quot;,&lt;br /&gt;
	elements:&lt;br /&gt;
	[&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			logicalTag: &amp;quot;parentLocationNodeIds&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			fromLocationNodeId: &amp;quot;xx&amp;quot;,&lt;br /&gt;
			maxHops: &amp;quot;xx&amp;quot; // numeric, optional, if not set default = 20&lt;br /&gt;
		},&lt;br /&gt;
		...&lt;br /&gt;
	]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Translations = &lt;br /&gt;
&lt;br /&gt;
== locationNode ==&lt;br /&gt;
&lt;br /&gt;
* given name of the location, eg: Bangkok&lt;br /&gt;
&lt;br /&gt;
== locationType ==&lt;br /&gt;
&lt;br /&gt;
* description of the type of label, eg: Country&lt;br /&gt;
* see note about about adding a second translation textTag for presentation text, because locationType translation is used to create locationTypeId, so if want to split Post Codes for different countries into their own locationTypes will need to have unique text (eg: &amp;quot;Post Code (USA)&amp;quot;, but might want to present with same text (eg: &amp;quot;Post Code&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
= Using locationNodeIds to search for sell offers =&lt;br /&gt;
&lt;br /&gt;
* Sellers set where they ship to, setting more inclusive ship to locationNodeIds is best (if it matches their actual service) because will be included in all searches for lower level locationNodeIds&lt;br /&gt;
* Buyers set where they are so can see sell offers that ship there, best to be as low level/specific as possible because will search sell offers for all matching parents&lt;br /&gt;
* Buyers can use their address which will find all parent locationNodeIds for all locationNodeIds in their address, or buyers can choose specific locationNodeId/s, eg a country when not signed in, this would return less results as will only return sell offers that specify they can ship anywhere in that country&lt;br /&gt;
&lt;br /&gt;
== Possible optimization when finding matching parents ==&lt;br /&gt;
&lt;br /&gt;
* eg: when given a set of locationNodeIds from a buyer's address, we find all parent locationNodeIds and use this list to filter ship to locationNodeIds to find sell offers that ship to this buyer. This can result in a large number of queries&lt;br /&gt;
* this will be mitigated a lot by our cached complex filter and search results, but is still a lot of processing&lt;br /&gt;
* in all cases, all nodes set in an address would be searched for, these optimizations are for finding additional parents for checking&lt;br /&gt;
* we could reduce the filtering work by reducing the number of parent locationNodeIds&lt;br /&gt;
* one way is to only accept parent links that meet a certain weight, eg reach a limit of how many times they have been used as a parent in user addresses. Problem with this is lower level links will have less links, and just because a link is used little does not make it invalid&lt;br /&gt;
* another way is to curate the types of parent links to search for, eg only accept certain chains of links, such as city &amp;gt; post code &amp;gt; state, any parent nodes that do not match this chain are ignored. Would probably need to know the country beforehand to set the accepted chains. Additional processing to handle this might outweigh the gains&lt;br /&gt;
* another is to have curated parents, user entry (eg by a low level admin role) sets which are real links worth checking&lt;br /&gt;
* new plan: set only one locationNodeId as used by an address to calculate the chain of parent locationNodeIds, default is the lowest level node, but allow per address to choose which node&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Locations|Locations]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Locations]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Locations&amp;diff=3738</id>
		<title>Service - Locations</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Locations&amp;diff=3738"/>
		<updated>2025-12-19T08:16:46Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Manages Location Graph&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-core-locations/izara-core-locations-locations/src/master/&lt;br /&gt;
&lt;br /&gt;
= ObjectSchemas =&lt;br /&gt;
=== LocationType ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;locationType&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;locationTypeId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;locationTypeId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LocationNode ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;locationNode&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;locationNodeId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;locationNodeId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LocationLink ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;objectType&amp;quot;: &amp;quot;locationNode&amp;quot;,&lt;br /&gt;
  &amp;quot;canDelete&amp;quot;: true,&lt;br /&gt;
  &amp;quot;belongTo&amp;quot;: {&lt;br /&gt;
    &amp;quot;serviceTag&amp;quot;: &amp;quot;UserAccount&amp;quot;,&lt;br /&gt;
    &amp;quot;objectType&amp;quot;: &amp;quot;user&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;storageResources&amp;quot;: {&lt;br /&gt;
    &amp;quot;graph&amp;quot;: {&lt;br /&gt;
      &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
      &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;addOnDataStructure&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;translation&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;fieldNames&amp;quot;: {&lt;br /&gt;
    &amp;quot;locationNodeId&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;randomOnCreate&amp;quot;: true,&lt;br /&gt;
      &amp;quot;requiredOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;optionalOnCreate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;canUpdate&amp;quot;: false,&lt;br /&gt;
      &amp;quot;validation&amp;quot;: {&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;^[a-zA-Z0-9_-]+$&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;storageResourceTags&amp;quot;: [&lt;br /&gt;
        &amp;quot;graph&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;compositeKeyDeliminator&amp;quot;: &amp;quot;_&amp;quot;,&lt;br /&gt;
  &amp;quot;identifiers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
      &amp;quot;fieldName&amp;quot;: &amp;quot;locationNodeId&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;generatedBy&amp;quot;: &amp;quot;userGenerated&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= DynamoDB tables =&lt;br /&gt;
&lt;br /&gt;
== [[Standard Config Table Per Service]] ==&lt;br /&gt;
&lt;br /&gt;
=== Configuration tags ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configKey: &amp;quot;LocationsGraphServiceName&amp;quot;&lt;br /&gt;
	configTag: &amp;quot;LocationsGraphServiceName&amp;quot;&lt;br /&gt;
	configValue: xxx // eg: &amp;quot;Locations&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	configKey: &amp;quot;TranslationGraphServiceName&amp;quot;&lt;br /&gt;
	configTag: &amp;quot;TranslationGraphServiceName&amp;quot;&lt;br /&gt;
	configValue: xxx // eg: &amp;quot;TranslationGraph&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Graph database = &lt;br /&gt;
&lt;br /&gt;
== [[Service - Locations Graph]]==&lt;br /&gt;
&lt;br /&gt;
=== Nodes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{LocationsSharedLib.LOCATIONNODE_GRAPH_NODE_LABEL}&amp;quot;, // &amp;quot;locationNode&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		identifier: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		restrictRelationships: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			locationNodeId: {&lt;br /&gt;
				identifier: true, // create unique id from translation and uniqueMessageId (because multiple locationNode can have same translation)&lt;br /&gt;
			},&lt;br /&gt;
			topLevel: {}, // true|false // now may be nodeLabel (extent)&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{LocationsSharedLib.LOCATIONTYPE_GRAPH_NODE_LABEL}&amp;quot;, // &amp;quot;locationType&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		identifier: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		restrictRelationships: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			locationTypeId: {&lt;br /&gt;
				identifier: true, // create unique id from translation&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Want to split eg postcodes for different countries into their own locationTypes, this will mean each has to have a different translation (two cannot be named &amp;quot;Post Code&amp;quot; or they will be considered the same label/use the same locationType node), for now use unique translations for each, but could add another translation as the presentation text, which is not used to identify the type, but when presenting the value&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{LocationsSharedLib.LOCATIONLINK_GRAPH_NODE_LABEL}&amp;quot;, // &amp;quot;locationLink&amp;quot;&lt;br /&gt;
	schema: {&lt;br /&gt;
		identifier: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		restrictRelationships: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			locationLinkId: {&lt;br /&gt;
				identifier: true, // create unique id from parent and child locationNode identifiers, because we only want one link to exist between two specific nodes&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Relationships ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;{LocationsSharedLib.HAS_LOCATIONLINK_GRAPH_REL_TYPE}&amp;quot;, // &amp;quot;has_locationLink&lt;br /&gt;
	schema: {&lt;br /&gt;
		elementCanBeRemoved: false,&lt;br /&gt;
		allPropertiesImmutable: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;{LocationsSharedLib.IS_LOCATIONNODE_GRAPH_REL_TYPE}&amp;quot;, // &amp;quot;is_locationNode&lt;br /&gt;
	schema: {&lt;br /&gt;
		elementCanBeRemoved: false,&lt;br /&gt;
		allPropertiesImmutable: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relationshipType: &amp;quot;{LocationsSharedLib.IS_LOCATIONTYPE_GRAPH_REL_TYPE}&amp;quot;, // &amp;quot;is_locationType&lt;br /&gt;
	schema: {&lt;br /&gt;
		elementCanBeRemoved: false,&lt;br /&gt;
		allPropertiesImmutable: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic node schemas ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{LocationsSharedLib.LOCATIONNODE_GRAPH_NODE_LABEL}&amp;quot;,&lt;br /&gt;
	schema: {&lt;br /&gt;
		identifier: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		restrictRelationships: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			locationNodeId: {&lt;br /&gt;
				identifier: true,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	nodeLabel: &amp;quot;{LocationsSharedLib.LOCATIONTYPE_GRAPH_NODE_LABEL}&amp;quot;,&lt;br /&gt;
	schema: {&lt;br /&gt;
		identifier: true,&lt;br /&gt;
		restrictProperties: true,&lt;br /&gt;
		restrictRelationships: true,&lt;br /&gt;
		properties: {&lt;br /&gt;
			locationTypeId: {&lt;br /&gt;
				identifier: true,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Complex Filter requests =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	filterType: &amp;quot;locationNode&amp;quot; //unique id is locationNodeId&lt;br /&gt;
	type: &amp;quot;group&amp;quot;,&lt;br /&gt;
	elements:&lt;br /&gt;
	[&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			logicalTag: &amp;quot;parentLocationNodeIds&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			fromLocationNodeId: &amp;quot;xx&amp;quot;,&lt;br /&gt;
			maxHops: &amp;quot;xx&amp;quot; // numeric, optional, if not set default = 20&lt;br /&gt;
		},&lt;br /&gt;
		...&lt;br /&gt;
	]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Translations = &lt;br /&gt;
&lt;br /&gt;
== locationNode ==&lt;br /&gt;
&lt;br /&gt;
* given name of the location, eg: Bangkok&lt;br /&gt;
&lt;br /&gt;
== locationType ==&lt;br /&gt;
&lt;br /&gt;
* description of the type of label, eg: Country&lt;br /&gt;
* see note about about adding a second translation textTag for presentation text, because locationType translation is used to create locationTypeId, so if want to split Post Codes for different countries into their own locationTypes will need to have unique text (eg: &amp;quot;Post Code (USA)&amp;quot;, but might want to present with same text (eg: &amp;quot;Post Code&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
= Using locationNodeIds to search for sell offers =&lt;br /&gt;
&lt;br /&gt;
* Sellers set where they ship to, setting more inclusive ship to locationNodeIds is best (if it matches their actual service) because will be included in all searches for lower level locationNodeIds&lt;br /&gt;
* Buyers set where they are so can see sell offers that ship there, best to be as low level/specific as possible because will search sell offers for all matching parents&lt;br /&gt;
* Buyers can use their address which will find all parent locationNodeIds for all locationNodeIds in their address, or buyers can choose specific locationNodeId/s, eg a country when not signed in, this would return less results as will only return sell offers that specify they can ship anywhere in that country&lt;br /&gt;
&lt;br /&gt;
== Possible optimization when finding matching parents ==&lt;br /&gt;
&lt;br /&gt;
* eg: when given a set of locationNodeIds from a buyer's address, we find all parent locationNodeIds and use this list to filter ship to locationNodeIds to find sell offers that ship to this buyer. This can result in a large number of queries&lt;br /&gt;
* this will be mitigated a lot by our cached complex filter and search results, but is still a lot of processing&lt;br /&gt;
* in all cases, all nodes set in an address would be searched for, these optimizations are for finding additional parents for checking&lt;br /&gt;
* we could reduce the filtering work by reducing the number of parent locationNodeIds&lt;br /&gt;
* one way is to only accept parent links that meet a certain weight, eg reach a limit of how many times they have been used as a parent in user addresses. Problem with this is lower level links will have less links, and just because a link is used little does not make it invalid&lt;br /&gt;
* another way is to curate the types of parent links to search for, eg only accept certain chains of links, such as city &amp;gt; post code &amp;gt; state, any parent nodes that do not match this chain are ignored. Would probably need to know the country beforehand to set the accepted chains. Additional processing to handle this might outweigh the gains&lt;br /&gt;
* another is to have curated parents, user entry (eg by a low level admin role) sets which are real links worth checking&lt;br /&gt;
* new plan: set only one locationNodeId as used by an address to calculate the chain of parent locationNodeIds, default is the lowest level node, but allow per address to choose which node&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Locations|Locations]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Locations]]&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-11-24_ImportData_Document&amp;diff=3736</id>
		<title>2025-11-24 ImportData Document</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-11-24_ImportData_Document&amp;diff=3736"/>
		<updated>2025-11-25T06:43:33Z</updated>

		<summary type="html">&lt;p&gt;Jammy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Process ImportData =&lt;br /&gt;
== ProcessCsvFile ==&lt;br /&gt;
#Receive bucketName and fieldName.&lt;br /&gt;
#Define the range e.g. range = &amp;quot;bytes=0-5000&amp;quot;.&lt;br /&gt;
#Fetch data from S3 with:&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
  		Bucket: 'izara-importdata',&lt;br /&gt;
  		Key: 'csv/xxxx.csv',&lt;br /&gt;
  		Range: 'bytes=0-5000'&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Take the importBatchId from the S3 metadata and use it to get ImportBatchMain to retrieve importConfigId.&lt;br /&gt;
#Use the retrieved importConfigId to get CsvImportConfig.&lt;br /&gt;
#Use the CsvImportConfig as the main configuration for processing.&lt;br /&gt;
#Loop through the S3 data to extract the titleRow, collecting all field names.&lt;br /&gt;
#After extracting all title rows, update fieldNames in ImportBatchMain.&lt;br /&gt;
#If S3 data is not fully read, continue with pagination to fetch the next portion.&lt;br /&gt;
#When the file ends, send importBatchId to ProcessRowData.&lt;br /&gt;
&lt;br /&gt;
== ProcessRowData ==&lt;br /&gt;
#Receive importBatchId.&lt;br /&gt;
#Use the received importBatchId to get ImportBatchMain and extract importConfigId.&lt;br /&gt;
#Use the retrieved importConfigId to get CsvImportConfig.&lt;br /&gt;
#Fetch data from S3 with:&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
  		Bucket: 'izara-importdata',&lt;br /&gt;
  		Key: 'csv/xxxx.csv',&lt;br /&gt;
  		Range: 'bytes=0-5000'&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Loop through the fetched data and store each row into dataRow, including pendingObjects and tempRelationship.&lt;br /&gt;
#Validate Schema, Validate Type, Check Required fields, and Check Action (create/update/reference/error).&lt;br /&gt;
#Check ImportUserReference to see if this object was already created; if yes, change Action from create → reference.&lt;br /&gt;
#Store PendingObjectMain, PendingObjectReference, PendingLink, and FloatingRelationships.&lt;br /&gt;
#If the file is not finished, re-invoke itself with the new startByte:&lt;br /&gt;
#*If not timed out → continue looping.&lt;br /&gt;
#*If timed out → perform pagination.&lt;br /&gt;
#If the file is finished, send importBatchId to ProcessFloatingRelationshipsHdrDsq.&lt;br /&gt;
&lt;br /&gt;
== ProcessFloatingRelationshipsHdrDsq ==&lt;br /&gt;
#Query FloatingRelationships using importBatchId.&lt;br /&gt;
#Process based on action type (create or update):&lt;br /&gt;
#*create&lt;br /&gt;
#**Create PendingLink for relationships where action = create, and update FloatingStatus: &amp;quot;complete&amp;quot;.&lt;br /&gt;
#*update&lt;br /&gt;
#**Update the existing relationship using data from object A/B.&lt;br /&gt;
#**Save AwaitingStep.&lt;br /&gt;
#**Call sendMessageToExternalForUpdateRelationship, sending: firstObject, secondObject, relType, relId, relationshipProperties, relationshipDirection.&lt;br /&gt;
#If not finished, continue with pagination.&lt;br /&gt;
#If fully processed, send importBatchId to ProcessPendingLinkHdrDsq.&lt;br /&gt;
&lt;br /&gt;
== ProcessPendingLink ==&lt;br /&gt;
#Query PendingLink using importBatchId.&lt;br /&gt;
#Loop to process each PendingLink.&lt;br /&gt;
#Run validateLinkConfig to check RequiredOnCreate.&lt;br /&gt;
#If no RequiredOnCreate, create AwaitingMultipleSteps:&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
await asyncFlowSharedLib.createAwaitingMultipleSteps(&lt;br /&gt;
 _izContext,&lt;br /&gt;
  [&lt;br /&gt;
    asyncFlowSharedLib.createAwaitingStepId(pendingObjectMainOfObjectA.pendingObjectId, consts.PREFIX_CREATE_PENDINGLINK), // object A&lt;br /&gt;
    asyncFlowSharedLib.createAwaitingStepId(pendingObjectMainOfObjectB.pendingObjectId, consts.PREFIX_CREATE_PENDINGLINK) // object B&lt;br /&gt;
  ],&lt;br /&gt;
    asyncFlowSharedLib.createPendingStepId(queryPendingLink.pendingLinkId, consts.PREFIX_CREATE_PENDINGLINK) // pendingLink&lt;br /&gt;
 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#If RequiredOnCreate exists, create two AwaitingMultipleSteps:&lt;br /&gt;
#*&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
await asyncFlowSharedLib.createAwaitingMultipleSteps(&lt;br /&gt;
 _izContext,&lt;br /&gt;
  [asyncFlowSharedLib.createAwaitingStepId(objectRequiredOnCreate.pendingObjectId, consts.PREFIX_IMPORTBATCHMAIN)],&lt;br /&gt;
  asyncFlowSharedLib.createPendingStepId(importBatchId, consts.PREFIX_IMPORTBATCHMAIN)&lt;br /&gt;
 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#*&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
await asyncFlowSharedLib.createAwaitingMultipleSteps(&lt;br /&gt;
 _izContext,&lt;br /&gt;
  [asyncFlowSharedLib.createAwaitingStepId(otherPendingObject.pendingObjectId, consts.PREFIX_CREATE_PENDINGOBJECT)],&lt;br /&gt;
  asyncFlowSharedLib.createPendingStepId(objectRequiredOnCreate.pendingObjectId, consts.PREFIX_CREATE_PENDINGOBJECT)&lt;br /&gt;
 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Update the PendingObjectMain of the RequiredOnCreate object:&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
  		&amp;quot;attributeName&amp;quot;: &amp;quot;requireOnCreateLinkIds&amp;quot;,&lt;br /&gt;
 		&amp;quot;value&amp;quot;: [pendingLinkId],&lt;br /&gt;
  		&amp;quot;action&amp;quot;: &amp;quot;SET&amp;quot;,&lt;br /&gt;
 		&amp;quot;listAppend&amp;quot;: true&lt;br /&gt;
	}   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#If more data remains, continue pagination.&lt;br /&gt;
#If all processed, send importBatchId to ProcessPendingObjectHdrDsq.&lt;br /&gt;
&lt;br /&gt;
== ProcessPendingObjectHdrDsq ==&lt;br /&gt;
#Query PendingObjectMain using importBatchId.&lt;br /&gt;
#Loop through each PendingObjectMain.&lt;br /&gt;
#If the object has RequiredOnCreate, do not send to ExternalService.&lt;br /&gt;
#If it has no RequiredOnCreate:&lt;br /&gt;
#*Create AwaitingMultipleSteps using PREFIX_IMPORTBATCHMAIN + pendingObjectId.&lt;br /&gt;
#*Send to ExternalService according to Action (create, get, update), including:&lt;br /&gt;
#**callingFlow = ExternalActionCompleteHdrSqs&lt;br /&gt;
#**callingFlowProperties = PREFIX_IMPORTBATCHMAIN + pendingObjectId&lt;br /&gt;
&lt;br /&gt;
== ExternalActionComplete ==&lt;br /&gt;
#Receive objType, objInstanceFull, errorFound, passBackProperty from ExternalService.&lt;br /&gt;
#Extract pendingObjectId from passBackProperty, locate AwaitingMultipleSteps, and remove it.&lt;br /&gt;
#If errorFound, run recursiveErrorPendingObject.&lt;br /&gt;
#If no error, update status to &amp;quot;complete&amp;quot;.&lt;br /&gt;
#Create pendingObjectAwaitingId to find objects that were waiting for this one.&lt;br /&gt;
#If there are objects waiting:&lt;br /&gt;
#*If they still wait for others → remove their AwaitingMultipleSteps.&lt;br /&gt;
#*If not → execute the RequiredOnCreate object and create its relationship.&lt;br /&gt;
#Check if all objects are completed. If yes → remove awaitingStep of ImportBatchMain and call clearAllAwaitingSteps.&lt;br /&gt;
#Return { returnValue: &amp;quot;externalActionComplete finish&amp;quot; }.&lt;br /&gt;
&lt;br /&gt;
== CreateLinkExternalComplete ==&lt;br /&gt;
#Receive firstObject, secondObject, relType, errorFounds, passBackProperties from ExternalService.&lt;br /&gt;
#Extract pendingLinkId from passBackProperties, find AwaitingMultipleSteps, and remove it.&lt;br /&gt;
#If there are errorFounds → update PendingLink as error; otherwise → mark it complete.&lt;br /&gt;
#Remove AwaitingMultipleSteps and call clearAllAwaitingSteps.&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-11-24_ImportData_Document&amp;diff=3699</id>
		<title>2025-11-24 ImportData Document</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-11-24_ImportData_Document&amp;diff=3699"/>
		<updated>2025-11-24T10:12:09Z</updated>

		<summary type="html">&lt;p&gt;Jammy: Created page with &amp;quot;= Process ImportData = == ProcessCsvFile == #Receive bucketName and fieldName. #Define the range, e.g. range = &amp;quot;bytes=0-5000&amp;quot;. #Fetch data from S3 with:&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;     {   		Bucket: 'izara-importdata',   		Key: 'csv/xxxx.csv',   		Range: 'bytes=0-5000' 	} &amp;lt;/syntaxhighlight&amp;gt; #Take the importBatchId from the S3 metadata and use it to get ImportBatchMain to retrieve importConfigId. #Use the retrieved importConfigId to get CsvImportConfig. #Use the Cs...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Process ImportData =&lt;br /&gt;
== ProcessCsvFile ==&lt;br /&gt;
#Receive bucketName and fieldName.&lt;br /&gt;
#Define the range, e.g. range = &amp;quot;bytes=0-5000&amp;quot;.&lt;br /&gt;
#Fetch data from S3 with:&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
  		Bucket: 'izara-importdata',&lt;br /&gt;
  		Key: 'csv/xxxx.csv',&lt;br /&gt;
  		Range: 'bytes=0-5000'&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Take the importBatchId from the S3 metadata and use it to get ImportBatchMain to retrieve importConfigId.&lt;br /&gt;
#Use the retrieved importConfigId to get CsvImportConfig.&lt;br /&gt;
#Use the CsvImportConfig as the main configuration for processing.&lt;br /&gt;
#Loop through the S3 data to extract the titleRow, collecting all field names.&lt;br /&gt;
#After extracting all title rows, update fieldNames in ImportBatchMain.&lt;br /&gt;
#If S3 data is not fully read, continue with pagination to fetch the next portion.&lt;br /&gt;
#When the file ends, send importBatchId to ProcessRowData.&lt;br /&gt;
&lt;br /&gt;
== ProcessRowData ==&lt;br /&gt;
#Receive importBatchId.&lt;br /&gt;
#Use the received importBatchId to get ImportBatchMain and extract importConfigId.&lt;br /&gt;
#Use the retrieved importConfigId to get CsvImportConfig.&lt;br /&gt;
#Fetch data from S3 with:&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
  		Bucket: 'izara-importdata',&lt;br /&gt;
  		Key: 'csv/xxxx.csv',&lt;br /&gt;
  		Range: 'bytes=0-5000'&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Loop through the fetched data and store each row into dataRow, including pendingObjects and tempRelationship.&lt;br /&gt;
#Validate Schema, Validate Type, Check Required fields, and Check Action (create/update/reference/error).&lt;br /&gt;
#Check ImportUserReference to see if this object was already created; if yes, change Action from create → reference.&lt;br /&gt;
#Store PendingObjectMain, PendingObjectReference, PendingLink, and FloatingRelationships.&lt;br /&gt;
#If the file is not finished, re-invoke itself with the new startByte:&lt;br /&gt;
#*If not timed out → continue looping.&lt;br /&gt;
#*If timed out → perform pagination.&lt;br /&gt;
#If the file is finished, send importBatchId to ProcessFloatingRelationshipsHdrDsq.&lt;br /&gt;
&lt;br /&gt;
== ProcessFloatingRelationshipsHdrDsq ==&lt;br /&gt;
#Query FloatingRelationships using importBatchId.&lt;br /&gt;
#Process based on action type (create or update):&lt;br /&gt;
#*create&lt;br /&gt;
#**Create PendingLink for relationships where action = create, and update FloatingStatus: &amp;quot;complete&amp;quot;.&lt;br /&gt;
#*update&lt;br /&gt;
#**Update the existing relationship using data from object A/B.&lt;br /&gt;
#**Save AwaitingStep.&lt;br /&gt;
#**Call sendMessageToExternalForUpdateRelationship, sending: firstObject, secondObject, relType, relId, relationshipProperties, relationshipDirection.&lt;br /&gt;
#If not finished, continue with pagination.&lt;br /&gt;
#If fully processed, send importBatchId to ProcessPendingLinkHdrDsq.&lt;br /&gt;
&lt;br /&gt;
== ProcessPendingLink ==&lt;br /&gt;
#Query PendingLink using importBatchId.&lt;br /&gt;
#Loop to process each PendingLink.&lt;br /&gt;
#Run validateLinkConfig to check RequiredOnCreate.&lt;br /&gt;
#If no RequiredOnCreate, create AwaitingMultipleSteps:&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
await asyncFlowSharedLib.createAwaitingMultipleSteps(&lt;br /&gt;
 _izContext,&lt;br /&gt;
  [&lt;br /&gt;
    asyncFlowSharedLib.createAwaitingStepId(pendingObjectMainOfObjectA.pendingObjectId, consts.PREFIX_CREATE_PENDINGLINK), // object A&lt;br /&gt;
    asyncFlowSharedLib.createAwaitingStepId(pendingObjectMainOfObjectB.pendingObjectId, consts.PREFIX_CREATE_PENDINGLINK) // object B&lt;br /&gt;
  ],&lt;br /&gt;
    asyncFlowSharedLib.createPendingStepId(queryPendingLink.pendingLinkId, consts.PREFIX_CREATE_PENDINGLINK) // pendingLink&lt;br /&gt;
 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#If RequiredOnCreate exists, create two AwaitingMultipleSteps:&lt;br /&gt;
#*&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
await asyncFlowSharedLib.createAwaitingMultipleSteps(&lt;br /&gt;
 _izContext,&lt;br /&gt;
  [asyncFlowSharedLib.createAwaitingStepId(objectRequiredOnCreate.pendingObjectId, consts.PREFIX_IMPORTBATCHMAIN)],&lt;br /&gt;
  asyncFlowSharedLib.createPendingStepId(importBatchId, consts.PREFIX_IMPORTBATCHMAIN)&lt;br /&gt;
 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#*&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
await asyncFlowSharedLib.createAwaitingMultipleSteps(&lt;br /&gt;
 _izContext,&lt;br /&gt;
  [asyncFlowSharedLib.createAwaitingStepId(otherPendingObject.pendingObjectId, consts.PREFIX_CREATE_PENDINGOBJECT)],&lt;br /&gt;
  asyncFlowSharedLib.createPendingStepId(objectRequiredOnCreate.pendingObjectId, consts.PREFIX_CREATE_PENDINGOBJECT)&lt;br /&gt;
 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Update the PendingObjectMain of the RequiredOnCreate object:&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
  		&amp;quot;attributeName&amp;quot;: &amp;quot;requireOnCreateLinkIds&amp;quot;,&lt;br /&gt;
 		&amp;quot;value&amp;quot;: [pendingLinkId],&lt;br /&gt;
  		&amp;quot;action&amp;quot;: &amp;quot;SET&amp;quot;,&lt;br /&gt;
 		&amp;quot;listAppend&amp;quot;: true&lt;br /&gt;
	}   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#If more data remains, continue pagination.&lt;br /&gt;
#If all processed, send importBatchId to ProcessPendingObjectHdrDsq.&lt;br /&gt;
&lt;br /&gt;
== ProcessPendingObjectHdrDsq ==&lt;br /&gt;
#Query PendingObjectMain using importBatchId.&lt;br /&gt;
#Loop through each PendingObjectMain.&lt;br /&gt;
#If the object has RequiredOnCreate, do not send to ExternalService.&lt;br /&gt;
#If it has no RequiredOnCreate:&lt;br /&gt;
#*Create AwaitingMultipleSteps using PREFIX_IMPORTBATCHMAIN + pendingObjectId.&lt;br /&gt;
#*Send to ExternalService according to Action (create, get, update), including:&lt;br /&gt;
#**callingFlow = ExternalActionCompleteHdrSqs&lt;br /&gt;
#**callingFlowProperties = PREFIX_IMPORTBATCHMAIN + pendingObjectId&lt;br /&gt;
&lt;br /&gt;
== ExternalActionComplete ==&lt;br /&gt;
#Receive objType, objInstanceFull, errorFound, passBackProperty from ExternalService.&lt;br /&gt;
#Extract pendingObjectId from passBackProperty, locate AwaitingMultipleSteps, and remove it.&lt;br /&gt;
#If errorFound, run recursiveErrorPendingObject.&lt;br /&gt;
#If no error, update status to &amp;quot;complete&amp;quot;.&lt;br /&gt;
#Create pendingObjectAwaitingId to find objects that were waiting for this one.&lt;br /&gt;
#If there are objects waiting:&lt;br /&gt;
#*If they still wait for others → remove their AwaitingMultipleSteps.&lt;br /&gt;
#*If not → execute the RequiredOnCreate object and create its relationship.&lt;br /&gt;
#Check if all objects are completed. If yes → remove awaitingStep of ImportBatchMain and call clearAllAwaitingSteps.&lt;br /&gt;
#Return { returnValue: &amp;quot;externalActionComplete finish&amp;quot; }.&lt;br /&gt;
&lt;br /&gt;
== CreateLinkExternalComplete ==&lt;br /&gt;
#Receive firstObject, secondObject, relType, errorFounds, passBackProperties from ExternalService.&lt;br /&gt;
#Extract pendingLinkId from passBackProperties, find AwaitingMultipleSteps, and remove it.&lt;br /&gt;
#If there are errorFounds → update PendingLink as error; otherwise → mark it complete.&lt;br /&gt;
#Remove AwaitingMultipleSteps and call clearAllAwaitingSteps.&lt;/div&gt;</summary>
		<author><name>Jammy</name></author>
	</entry>
</feed>