1

我想从数据库中查询所有用户朋友的帖子。我已经制定了以下代码,它似乎可以工作,但看起来不太好,尤其是我过滤具有用户 ID 的帖子的部分。

user.$friends
    .query(on: request.db)
    .all()
    .flatMap { (friends: Array<User>) -> EventLoopFuture<Page<Post>> in
        return Post
            .query(on: request.db)
            .filter(\.$user.$id ~~ friends.reduce(into: [], { (ids: inout Set<UUID>, user: User) in
                if let id: UUID = user.id {
                    ids.insert(id)
                }
            }))
            .sort(\.$createdAt)
            .paginate(for: request)
    }

如何清理此代码?

4

1 回答 1

2

我没有机会对此进行测试,但它看起来是正确的:

return user.$friends
    .query(on: request.db)
    .all()
    .flatMap { (friends: Array<User>) -> EventLoopFuture<Page<Post>> in
        return friends.map { friend in
            return Post
                .query(on: request.db)
                .filter(\.$user.$id == friend).all()
        }.flatten(on: request.eventLoop)
        .sort(\.$createdAt)
        .paginate(for: request)
    }

查询返回一个帖子数组的数组,因此需要在对其进行排序和分页之前进行展平。

于 2020-09-10T18:59:36.927 回答