Browse Source

ProductVariant

- sort by position
Alexey Kim 2 years ago
parent
commit
b3dfe9de04
2 changed files with 40 additions and 1 deletions
  1. 37 0
      graphql/helper/meta_position.go
  2. 3 1
      graphql/helper/product_variant.go

+ 37 - 0
graphql/helper/meta_position.go

@@ -0,0 +1,37 @@
+package helper
+
+import (
+	"github.com/gshopify/service-wrapper/model"
+	"gshopper.com/gshopify/products/graphql/generated"
+	"strconv"
+)
+
+func ExtractMetaPosition(namespace model.Gid, metas []*generated.Metafield) int64 {
+	for _, meta := range metas {
+		if meta == nil {
+			continue
+		}
+
+		if model.Gid(meta.Namespace) != namespace {
+			continue
+		}
+
+		t := model.MetaFieldType(meta.Type)
+		if !t.IsValid() || model.MetaFieldTypeNumberInteger != t {
+			continue
+		}
+
+		if meta.Key != "position" {
+			continue
+		}
+
+		i, err := strconv.ParseInt(meta.Value, 10, 64)
+		if err != nil {
+			i = -1
+		}
+
+		return i
+	}
+
+	return -1
+}

+ 3 - 1
graphql/helper/product_variant.go

@@ -40,7 +40,9 @@ func NewProductVariantConnection(src []*generated.ProductVariant,
 				}
 
 				return isku < jsku
-			case generated.ProductVariantSortKeysPosition: // TODO:
+			case generated.ProductVariantSortKeysPosition:
+				return ExtractMetaPosition(model.GidVariant, src[i].Metafields) <
+					ExtractMetaPosition(model.GidVariant, src[j].Metafields)
 			case generated.ProductVariantSortKeysRelevance: // TODO:
 			}