Необходимо добавить метод для отправки сообщения всем подключенным клиентам при добавлении нового комментария.
public void sendCommentToAllClients(Comment comment) {
if (ns != null) {
ns.broadcast("comment:save", comment);
}
}
После сохранения комментария, необходимо отправить его через
SocketEmitter всем клиентам.
@PostMapping("/add-comment")
public ResponseEntity<Comment> addComment(@RequestBody BookResponse reqBody, Authentication authentication) {
try {
// (...)
commentRepository.save(comment);
// Отправляем комментарий всем подключенным клиентам
socketEmitter.sendCommentToAllClients(comment);
return ResponseEntity.status(HttpStatus.OK).body(comment);
} catch (Exception ex) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.build();
}
}
Вы уже реализовали прослушивание события
comment:save на клиенте, поэтому необходимо только убедиться, что данные обрабатываются корректно.
useEffect(() => {
socket.on('comment:save', (data: Comment) => {
const comment = JSON.parse(data as any)
console.log('comment', comment);
props.book.comments.push(comment);
// Если setBookInState обновляет состояние, это может быть полезно для перерисовки
// props.setBookInState({...props.book});
toast.info('Got event from socket: Book ' + comment.text)
});
}, [socket]);