Субобъект не разбирается graphql с golang

Сам объект внутри объекта анализируется с пустым полем.

вход:

{
  Products(search: {limit: 1, filters: {product_id: {gte: 5}}}) {
    data {
      product_id
      product_name
      sales_history{
        total_check
      }
    }
  }
}

выход:

{
  "data": {
    "Products": {
      "data": [
        {
          "product_id": 35,
          "product_name": "testpr",
          "sales_history": {}
        }
      ]
    }
  }
}

Тип продукта:

gql.ProductType = graphql.NewObject(graphql.ObjectConfig{
        Name: "Product",
        Fields: graphql.Fields{
            "product_id": &graphql.Field{
                Type: graphql.Int,
            },
            "product_name": &graphql.Field{
                Type: graphql.String,
            },
            "sales_history": &graphql.Field{
                Type: gql.SalesHistoryType,
            },
        },
    })

Тип истории продаж:

gql.SalesHistoryType = graphql.NewObject(graphql.ObjectConfig{
    Name: "sales_history",
    Fields: graphql.Fields{
        "total_check": &graphql.Field{
            Type: graphql.Float,
        },
    },
})

В Resolve возвращаем карту в интерфейсе:

map [data: [map [product_id: 35 product_name: testpr sales_history: map [total_check: 671.20]]]]

Я создаю карту "sales_history" самостоятельно, в противном случае напротив поля sales_history - null

1 ответ

Проблема была в упаковке финальной карты.

Это было не правильно:

tmp := make(map[string]interface{}, 0)
tmp["total_check"] = v["total_check"]
v["sales_history"] = tmp

* Некоторые поля скрыты

Это верно:

v["sales_history"] = make(map[string]interface{}, 0)
v["sales_history"].(map[string]interface{})["total_check"] = v["total_check"]
Другие вопросы по тегам