1)关于问题的语境化:
我正在尝试使用 03 个不同的服务/存储库(userService + postService + userRepo)在 03 个不同的 DB-Collections(Reactive MongoDB)中“删除”项目;
我的目标是使用相同的链接代码同时删除一个对象(在每个集合中);
以下是上述情况的代码:
1.1) 代码:
当前工作状态:不工作;
当前行为:不执行任何删除,无论是 delete-userService、delete-postService 还是 delete-userRepo。
@Slf4j
@Service
@AllArgsConstructor
public class UserService implements UserServiceInt {
private final UserRepo userRepo;
private final PostServiceInt postServ;
private final CommentServiceInt comServ;
private final CustomExceptions customExceptions;
@Override
public Mono<Void> deleteInThreeCollections(String id) {
return userRepo
.findById(id)
.switchIfEmpty(customExceptions.userNotFoundException())
.map(user -> {
userRepo.delete(user); // First deletion - delete-method from userRepo
return user;
})
.flatMapMany(user -> postServ.findPostsByAuthorId(user.getId()))
.map(post -> {
postServ.delete(post); // Second deletion - delete-method from postService
return post;
})
.flatMap(post -> comServ.findCommentsByPostId(post.getPostId()))
.map(comServ::delete) // Third deletion - delete-method from commentService
.then()
;
}
}
2)问题:
- 如何删除不同 DB-Collections 中的不同元素,
- 通过仅使用一个使用三个“删除方法”的“链式删除方法”
- 三种不同的服务/repo(userService + postService + userRepo?
- 通过仅使用一个使用三个“删除方法”的“链式删除方法”
3)更新:
找到解决方案
@Override
public Mono<Void> deleteInThreeCollections(String id) {
return userRepo
.findById(id)
.switchIfEmpty(customExceptions.userNotFoundException())
.flatMap(
user -> postServ
.findPostsByAuthorId(user.getId())
.flatMap(
post -> comServ.findCommentsByPostId(
post.getPostId())
.flatMap(comServ::delete)
.thenMany(
postServ.findPostsByAuthorId(
post.getAuthor()
.getId()))
.flatMap(postServ::delete)
)
.then(userRepo.delete(user))
);
}
非常感谢您的帮助