使用突变的 Graphql 删除操作

Graphql Delete operation using mutation

我正在尝试创建删除操作。我有一个用户和任务要做。每个用户都有一个分配的任务列表。这是我的删除操作代码:

const Mutation = new GraphQLObjectType({
    name: 'Mutation',
    fields: {
        deleteUser: {
            type: UserType,
            args: {
                id: { type: new GraphQLNonNull(GraphQLID) }
            },
            resolve(parent, args){
                var id = (args.id).toString()
                let todos = Todo.find({ user_id: id });
                let user = User.findById(args.id);
                todos.remove();
                user.findOneAndRemove();
                return todos;
            }
        }
    }
})

这是我定义的类型:

const ToDoType = new GraphQLObjectType({
    name: 'todoItem',
    fields: () => ({
        id: {type: GraphQLID},
        title: {type: GraphQLString},
        completed: {type: GraphQLBoolean},
        user: {
            type: UserType,
            resolve(parent, args){
                return User.findById(parent.user_id);
            }
        }
    })
});

const UserType = new GraphQLObjectType({
    name: 'user',
    fields: () => ({
        id: {type: GraphQLID},
        name: {type: GraphQLString},
        email: {type: GraphQLString},
        login: {type: GraphQLString},
        todos: {
            type: new GraphQLList(ToDoType),
            resolve(parent, args){
                return Todo.find({ user_id: parent.id })
            }
        }
    })
});

问题是,在删除用户时,我想删除他所有的“待办事项”,但根据我在 return 中输入的内容,我只能删除一件事。所以现在我有“return todos”,它只删除分配给用户的待办事项,而不是用户。当我把“return 用户”放在那里时,它只会删除没有他的任务的用户。如何一次性删除用户和他的任务?

所示代码似乎实际上改变了数据以删除用户及其所有待办事项。我相信您感到困惑的是变异操作具有 User 的“类型”(即它将 return 的类型)。因此,这就是您需要从突变函数 return 得到的。

从概念上讲,从用户及其所有数据来看, return 可能是个好主意,因此如果 API 用户想要捕获其中的部分或全部,他们可以,尽管考虑到隐私问题可能并不理想。另一种方法是让突变 return 成为 success-or-failure 状态。