Субобъект не разбирается 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"]