при попытке отправить входной объект с помощью graphql, одно из свойств объекта получает пустые значения - PullRequest
0 голосов
/ 08 октября 2018

Я использую go на стороне сервера с graphql, а angular6 с apollo на стороне клиента.

Я пытаюсь отправить следующий объект в мутации:

{
  "deliveryId": 1,
  "products": [{
    "id": 3,
    "quantity": 1
  }],
  "payment": {
    "name": "kfir ozer",
    "number": "4580 0307 6696 9445",
    "expiry": "02 / 122",
    "cvc": "332"
  }
}

Я вставляю этот объект в следующую функцию, чтобы отправить его на сервер:

addOrderInfo(order) {
  return this.apollo.mutate({
    mutation: gql `
      mutation AddOrderInfo($order: Order!) {
        addOrderInfo(order: $order) {
          id
        }
      }
    `,
    variables: {
      order
    }
  });
}

и теперь на стороне сервера ..

вот как я настраиваю соответствующие типы:

cartProduct: = graphql.NewInputObject(
  graphql.InputObjectConfig {
    Name: "CartProduct",
    Fields: graphql.InputObjectConfigFieldMap {
      "id": & graphql.InputObjectFieldConfig {
        Type: graphql.Int,
      },
      "quantity": & graphql.InputObjectFieldConfig {
        Type: graphql.Int,
      },
    },
  },
)
payment: = graphql.NewInputObject(
  graphql.InputObjectConfig {
    Name: "CreditCardPayment",
    Fields: graphql.InputObjectConfigFieldMap {
      "name": & graphql.InputObjectFieldConfig {
        Type: graphql.String,
      },
      "number": & graphql.InputObjectFieldConfig {
        Type: graphql.String,
      },
      "expiry": & graphql.InputObjectFieldConfig {
        Type: graphql.String,
      },
      "cvc": & graphql.InputObjectFieldConfig {
        Type: graphql.String,
      },
    },
  },
)
order: = graphql.NewInputObject(
  graphql.InputObjectConfig {
    Name: "Order",
    Fields: graphql.InputObjectConfigFieldMap {
      "deliveryId": & graphql.InputObjectFieldConfig {
        Type: graphql.Int,
      },
      "payment": & graphql.InputObjectFieldConfig {
        Type: payment,
      },
      "products": & graphql.InputObjectFieldConfig {
        Type: graphql.NewList(cartProduct),
      },
    },
  },
)

и вот как я установил мутацию:

RootMutation: = graphql.NewObject(graphql.ObjectConfig {
  Name: "Mutation",
  Fields: graphql.Fields {
      "addOrderInfo": & graphql.Field {
        Type: ContactUsType,
        Args: graphql.FieldConfigArgument {
          "order": & graphql.ArgumentConfig {
            Type: order,
          },
        },
        Resolve: func(params graphql.ResolveParams)(interface {}, error) {
          ### here I created a breakpoint with intellij
          ### and noticed that the payment related values
          ### are empty strings
        },
      },
    }
    ...
  }
}

и на стороне сервера ... параметры возвращают правильные данные, но payment property содержит expiry, cvc, name и number свойства, но они представляют собой пустую строку вместо фактических значений.

что мне не хватает?

спасибо

...