Service - Product Attributes

From Izara Wiki
Jump to navigation Jump to search

Overview

Manages Product Attributes and ProductAttributeLinks. Product Attributes can be shared by many Products, ProductAttributeLinks are used to create an attribute tree for one Product.

Repository

https://bitbucket.org/izara-market-products/izara-market-products-product-attributes/src/master/

DynamoDB tables

Standard Config Table Per Service

Configuration tags

..

LogicalResults

Stores results for any requests to perform logical searches on media links

{
	resultId: xxx // eg: filterMainId for a single logical element
	dataId: xxx // one productAttributeLinkId
}
  • partition key: resultId
  • sort key: dataId

Graph database

Service - Products Graph

Nodes

{
	nodeLabel: "productAttributeLabel",
	schema: {
		identifier: true,
		restrictProperties: true,
		restrictRelationships: true,
		properties: {
			productAttributeLabelId: {
				identifier: true, //(random uuid)
			},
		},
	}
}
  • groups product attributes, eg: "colour", "size", etc..
{
	nodeLabel: "productAttribute",
	schema: {
		identifier: true,
		restrictProperties: true,
		restrictRelationships: true,
		properties: {
			productAttributeId: {
				identifier: true, //(random uuid)
			},
		},
	}
}
  • one product attributes value inside one product label, eg: "green" under the "colour" label
{
	nodeLabel: "productAttributeLink",
	schema: {
		identifier: true,
		restrictProperties: true,
		restrictRelationships: true,
		properties: {
			productAttributeLinkId: {
				identifier: true, //(random uuid)
			},
			productId: {
				immutable: true,
			},
			productAttributeId: {
				immutable: true,
			},
		},
	}
}
{
	nodeLabel: "productAttributeProperty",
	schema: {
		identifier: true,
		restrictProperties: true,
		restrictRelationships: true,
		properties: {
			propertyId: {
				identifier: true, //(random uuid)
			},
			productAttributeId: {
				immutable: true,
			},
		},
	}
}
{
	nodeLabel: "productAttributePropertyName",
	schema: {
		identifier: true,
		restrictProperties: true,
		restrictRelationships: true,
		properties: {
			propertyId: {
				identifier: true,
			},
		},
	}
}
{
	nodeLabel: "productAttributePropertyValue",
	schema: {
		identifier: true,
		restrictProperties: true,
		restrictRelationships: true,
		properties: {
			propertyId: {
				identifier: true,
			},
		},
	}
}

Relationships

{
	relationshipType: "hasProductAttributeLink",
	schema: {
		elementCanBeRemoved: true,
		allPropertiesImmutable: true,
		restrictProperties: true,
		properties: {
			originTimestamp: //timestamp the request to create/change this relationship was sent
		},
	}
}
{
	relationshipType: "disabledProductAttributeLink",
	schema: {
		elementCanBeRemoved: true,
		allPropertiesImmutable: true,
		restrictProperties: true,
		properties: {
			originTimestamp: //timestamp the request to create/change this relationship was sent
		},
	}
}
  • creates a link in attribute tree between a Product or ProductAttributeLink, and a child ProductAttributeLink
{
	relationshipType: "isProductAttribute",
	schema: {
		elementCanBeRemoved: true,
		allPropertiesImmutable: true,
		restrictProperties: true,
		properties: {
			originTimestamp: //timestamp the request to create/change this relationship was sent
		},
	}
}
  • links one ProductAttributeLink to one ProductAttribute
{
	relationshipType: "isProductAttributeLabel",
	schema: {
		elementCanBeRemoved: true,
		allPropertiesImmutable: true,
		restrictProperties: true,
		properties: {
			originTimestamp: //timestamp the request to create/change this relationship was sent
		},
	}
}
  • links one ProductAttribute to one ProductAttributeLabel
{
	relationshipType: "hasProductAttributeProperty",
	schema: {
		elementCanBeRemoved: true,
		allPropertiesImmutable: true,
		restrictProperties: true,
		properties: {
			originTimestamp: //timestamp the request to create/change this relationship was sent
		},
	}
}
{
	relationshipType: "disabledProductAttributeProperty",
	schema: {
		elementCanBeRemoved: true,
		allPropertiesImmutable: true,
		restrictProperties: true,
		properties: {
			originTimestamp: //timestamp the request to create/change this relationship was sent
		},
	}
}
  • links a ProductAttribute node to it's Properties

Basic node schemas

productAttributeLabel

productAttribute

productAttributePropertyName

productAttributePropertyValue

Working documents

Product Attributes