shurcooL / graphql

Package graphql provides a GraphQL client implementation.
MIT License
704 stars 280 forks source link

Allow building mutations from maps instead of structs #80

Open grihabor opened 2 years ago

grihabor commented 2 years ago

Suppose I can create user like this

mutation($login: String!) {
    createUser(login: $login) { login }
}
variables {
    "login": "grihabor"
}

Now I'd like to create multiple users in single request

mutation($login1: String!, $login2: String!, $login3: String!) {
    createUser(login: $login1) { login }
    createUser(login: $login2) { login }
    createUser(login: $login3) { login }
}
variables {
    "login1": "grihabor",
        "login2": "diman",
        "login3": "indigo",
}

It would be convenient to implement it in code with ordered map

type CreateUser struct {
    Login graphql.String
}
m := [][2]interface{}{
    {"createUser(login: $login1)", &CreateUser{}},
    {"createUser(login: $login2)", &CreateUser{}},
    {"createUser(login: $login3)", &CreateUser{}},
}
variables := map[string]interface{}{
    "login1": "grihabor",
    "login2": "diman",
    "login3": "indigo",
}
_ = client.Mutate(context.Background(), &m, variables)

jfyi I've started implementing the thing