При отправке новых данных коллекция автоматически генерирует новый идентификатор, но что произойдет, если вы попытаетесь отправить две отдельные коллекции одновременно? Так как они становятся связаны друг с другом? Я думал, если это возможно (данные посты и теги являются отдельными коллекциями):
mutation AddPostsAndTags(
$title:String!,
$description:String!,
$tags: [String]!
){
addPosts(
title:$title,
description: $description,
tags: $tags
){
id
title
description
tags {
id
name
}
}
}
Предполагая, что теги относятся к постам, я должен делать это так? Когда я запускаю его на основе этого запроса:
{
"title": "hello",
"description": "more d123escription",
"tags": ["info", "help"]
}
Я получаю:
{
"data": {
"addPost": null
}
}
Данные поста добавляются в коллекцию постов, но ничего в тегах.
Вот мои типы сообщений и тегов:
Тип сообщения:
const PostType = new GraphQLObjectType({
name: 'PostType',
fields: () => ({
id: { type: GraphQLID },
title: { type: GraphQLString },
description: { type: GraphQLString },
tags: {
type: new GraphQLList(TagType),
resolve(parentValue, args) {
return axios
.get(`http://localhost:3000/posts/${parentValue.id}/posts`)
.then(resp => resp.data);
}
}
})
});
Тип тега:
const TagType = new GraphQLObjectType({
name: 'TagType',
fields: () => ({
id: {type: GraphQLID},
name: {type: GraphQLString},
post: {
type: require('./PostType'),
resolve(parentValue, args) {
return axios.get(`http://localhost:3000/posts/${parentValue.postId}`).then(resp => resp.data);
},
},
}),
});
Разделение этих различных типов, но они связаны на основе идентификатора.
Тогда у меня есть мутация:
const Mutations = new GraphQLObjectType({
name: 'Mutation',
fields: {
addPost: {
type: PostType,
args: {
title: {type: new GraphQLNonNull(GraphQLString)},
description: {type: new GraphQLNonNull(GraphQLString)},
// is this posts necessary? It is a GraphQLList
posts: {type: new GraphQLNonNull(new GraphQLList(GraphQLString))},
},
resolve(parentValue, {title, description}) {
return axios
.post(`http://localhost:3000/posts`, {title, description})
.then(res => console.log(res));
},
},
addTag: {
type: TagType,
args: {
name: {type: new GraphQLNonNull(GraphQLString)},
description: {type: GraphQLString},
postId: {type: GraphQLString},
},
resolve(parentValue, {name}) {
return axios
.post(`http://localhost:3000/tags`, {name})
.then(res => res.data);
},
},
// Should I have another mutation? like AddTagsToPosts? Is this the best approach?
},
});
Теперь я даже не уверен, правильно ли настроена моя мутация. Нужен ли пост GraphQLList в AddPost? Должен ли я иметь одну простую мутацию, чтобы иметь и сообщения, и теги?