@@ -10,6 +10,7 @@ public class ChatDto {
|
|||||||
private String otherUserName;
|
private String otherUserName;
|
||||||
private String otherUserAvatar;
|
private String otherUserAvatar;
|
||||||
private Long postId;
|
private Long postId;
|
||||||
|
private ChatPostDto post;
|
||||||
private String lastMessage;
|
private String lastMessage;
|
||||||
private LocalDateTime lastMessageAt;
|
private LocalDateTime lastMessageAt;
|
||||||
private long unreadCount;
|
private long unreadCount;
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
package com.krylov.refound.service;
|
package com.krylov.refound.service;
|
||||||
|
|
||||||
import com.krylov.refound.dto.ChatDto;
|
import com.krylov.refound.dto.ChatDto;
|
||||||
|
import com.krylov.refound.dto.ChatPostDto;
|
||||||
import com.krylov.refound.dto.MessageDto;
|
import com.krylov.refound.dto.MessageDto;
|
||||||
import com.krylov.refound.entity.Chat;
|
import com.krylov.refound.entity.Chat;
|
||||||
|
import com.krylov.refound.entity.Image;
|
||||||
import com.krylov.refound.entity.Message;
|
import com.krylov.refound.entity.Message;
|
||||||
import com.krylov.refound.repository.ChatRepository;
|
import com.krylov.refound.repository.ChatRepository;
|
||||||
import com.krylov.refound.repository.MessageRepository;
|
import com.krylov.refound.repository.MessageRepository;
|
||||||
|
import com.krylov.refound.repository.PostRepository;
|
||||||
import com.krylov.refound.repository.UserRepository;
|
import com.krylov.refound.repository.UserRepository;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -27,6 +30,7 @@ public class ChatService {
|
|||||||
private final MessageRepository messageRepository;
|
private final MessageRepository messageRepository;
|
||||||
private final SimpMessagingTemplate messagingTemplate;
|
private final SimpMessagingTemplate messagingTemplate;
|
||||||
private final UserRepository userRepository;
|
private final UserRepository userRepository;
|
||||||
|
private final PostRepository postRepository;
|
||||||
|
|
||||||
// Создать чат с пользователем (или вернуть существующий)
|
// Создать чат с пользователем (или вернуть существующий)
|
||||||
@Transactional
|
@Transactional
|
||||||
@@ -134,6 +138,16 @@ public class ChatService {
|
|||||||
dto.setOtherUserAvatar(user.getAvatarUrl());
|
dto.setOtherUserAvatar(user.getAvatarUrl());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (chat.getPostId() != null) {
|
||||||
|
postRepository.findById(chat.getPostId()).ifPresent(post -> {
|
||||||
|
ChatPostDto postDto = new ChatPostDto();
|
||||||
|
postDto.setId(post.getId());
|
||||||
|
postDto.setTitle(post.getTitle());
|
||||||
|
postDto.setImages(post.getImages().stream().map(Image::getUrl).toList());
|
||||||
|
dto.setPost(postDto);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// без N+1: берём только последнее сообщение, а не всю историю
|
// без N+1: берём только последнее сообщение, а не всю историю
|
||||||
messageRepository.findFirstByChatIdOrderByCreatedAtDesc(chat.getId())
|
messageRepository.findFirstByChatIdOrderByCreatedAtDesc(chat.getId())
|
||||||
.ifPresent(last -> {
|
.ifPresent(last -> {
|
||||||
|
|||||||
Reference in New Issue
Block a user