2019-10-02 16:25:46 +00:00
|
|
|
package org.ros.chatto.service;
|
|
|
|
|
|
|
|
import java.util.Date;
|
|
|
|
import java.util.List;
|
2020-05-27 10:46:04 +00:00
|
|
|
import java.util.Optional;
|
2019-10-22 12:12:18 +00:00
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
2020-05-27 10:46:04 +00:00
|
|
|
import org.modelmapper.ModelMapper;
|
2019-10-02 16:25:46 +00:00
|
|
|
import org.ros.chatto.dto.ChatMessageDTO;
|
2019-10-22 12:12:18 +00:00
|
|
|
import org.ros.chatto.dto.MessageCipherDTO;
|
|
|
|
import org.ros.chatto.dto.ReencryptionDTO;
|
2019-10-02 16:25:46 +00:00
|
|
|
import org.ros.chatto.model.ChatMessage;
|
|
|
|
import org.ros.chatto.model.ChatUser;
|
|
|
|
import org.ros.chatto.model.MessageCipher;
|
|
|
|
import org.ros.chatto.repository.ChatMessageRepository;
|
|
|
|
import org.ros.chatto.repository.MessageCipherRepository;
|
|
|
|
import org.ros.chatto.repository.UserRepository;
|
|
|
|
import org.springframework.data.domain.PageRequest;
|
|
|
|
import org.springframework.stereotype.Service;
|
2019-11-28 05:38:50 +00:00
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
2019-10-02 16:25:46 +00:00
|
|
|
|
2019-12-12 06:48:19 +00:00
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
2019-10-02 16:25:46 +00:00
|
|
|
@Service
|
2019-11-28 05:38:50 +00:00
|
|
|
@Transactional
|
2019-12-12 06:48:19 +00:00
|
|
|
@RequiredArgsConstructor
|
2019-10-02 16:25:46 +00:00
|
|
|
public class ChatServiceImpl implements ChatService {
|
|
|
|
|
2020-05-27 10:46:04 +00:00
|
|
|
private final ModelMapper modelMapper;
|
2019-12-12 06:48:19 +00:00
|
|
|
private final UserRepository userRepository;
|
|
|
|
private final MessageCipherRepository messageCipherRepository;
|
|
|
|
private final ChatMessageRepository chatMessageRepository;
|
|
|
|
private final MyConversionService myConversionService;
|
2019-10-02 16:25:46 +00:00
|
|
|
|
2020-01-31 04:46:13 +00:00
|
|
|
public ChatMessageDTO createMessage(final String fromUserName,
|
|
|
|
final String toUserName, final MessageCipherDTO messageCipherDTO) {
|
2019-10-02 16:25:46 +00:00
|
|
|
|
2020-05-27 10:46:04 +00:00
|
|
|
final Optional<ChatUser> fromUser = userRepository
|
|
|
|
.findByUserName(fromUserName);
|
|
|
|
final Optional<ChatUser> toUser = userRepository
|
|
|
|
.findByUserName(toUserName);
|
2019-10-02 16:25:46 +00:00
|
|
|
|
2020-05-27 10:46:04 +00:00
|
|
|
final Optional<ChatMessage> cm = fromUser.flatMap(fu -> {
|
|
|
|
return toUser.map(tu -> {
|
|
|
|
ChatMessage chatMessage = new ChatMessage();
|
|
|
|
MessageCipher messageCipher = myConversionService
|
|
|
|
.convertToMessageCipher(messageCipherDTO);
|
|
|
|
messageCipher = messageCipherRepository.save(messageCipher);
|
|
|
|
chatMessage.setMessageCipher(messageCipher);
|
|
|
|
chatMessage.setFromUser(fu);
|
|
|
|
chatMessage.setToUser(tu);
|
|
|
|
chatMessage = chatMessageRepository.save(chatMessage);
|
|
|
|
return chatMessage;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
return modelMapper.map(cm, ChatMessageDTO.class);
|
2019-10-02 16:25:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2019-11-28 05:38:50 +00:00
|
|
|
@Transactional(readOnly = true)
|
2020-01-31 04:46:13 +00:00
|
|
|
public List<ChatMessageDTO> getAllMessages(final String fromUser,
|
|
|
|
final String toUser) {
|
|
|
|
final List<ChatMessage> chatMessages = chatMessageRepository
|
|
|
|
.getAllMessages(fromUser, toUser);
|
|
|
|
final List<ChatMessageDTO> chatMessageDTOs = myConversionService
|
|
|
|
.convertToChatMessageDTOs(chatMessages);
|
2019-12-12 05:22:32 +00:00
|
|
|
return chatMessageDTOs;
|
2019-10-02 16:25:46 +00:00
|
|
|
}
|
2019-12-12 05:22:32 +00:00
|
|
|
|
2019-10-22 12:12:18 +00:00
|
|
|
@Override
|
2019-11-28 05:38:50 +00:00
|
|
|
@Transactional(readOnly = true)
|
2020-01-31 04:46:13 +00:00
|
|
|
public List<ReencryptionDTO> getAllMessagesForReencryption(
|
|
|
|
final String fromUser, final String toUser) {
|
|
|
|
return myConversionService.convertToReencryptionDTOs(
|
|
|
|
chatMessageRepository.getAllMessages(fromUser, toUser));
|
2019-10-22 12:12:18 +00:00
|
|
|
}
|
2019-10-02 16:25:46 +00:00
|
|
|
|
|
|
|
@Override
|
2019-11-28 05:38:50 +00:00
|
|
|
@Transactional(readOnly = true)
|
2020-01-31 04:46:13 +00:00
|
|
|
public List<ChatMessageDTO> getMessagePage(final String fromUser,
|
|
|
|
final String toUser, final int page, final int size) {
|
2019-12-12 05:22:32 +00:00
|
|
|
return myConversionService.convertToChatMessageDTOs(
|
2020-01-31 04:46:13 +00:00
|
|
|
chatMessageRepository.getAllMessages(fromUser, toUser,
|
|
|
|
PageRequest.of(page, size)));
|
2019-10-02 16:25:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2019-11-28 05:38:50 +00:00
|
|
|
@Transactional(readOnly = true)
|
2020-01-31 04:46:13 +00:00
|
|
|
public List<ChatMessageDTO> getNewMessages(final String fromUser,
|
|
|
|
final String toUser, final Date lastMessageTime) {
|
|
|
|
final List<ChatMessage> chatMessages = chatMessageRepository
|
|
|
|
.getNewMessages(fromUser, toUser, lastMessageTime);
|
2019-10-02 16:25:46 +00:00
|
|
|
return myConversionService.convertToChatMessageDTOs(chatMessages);
|
|
|
|
}
|
2019-10-22 12:12:18 +00:00
|
|
|
|
|
|
|
@Override
|
2020-01-31 04:46:13 +00:00
|
|
|
public void reencryptMessages(
|
|
|
|
final List<ReencryptionDTO> reencryptionDTOs) {
|
2019-12-12 05:22:32 +00:00
|
|
|
final List<MessageCipher> messageCiphers = reencryptionDTOs.stream()
|
2020-01-31 04:46:13 +00:00
|
|
|
.map(reencryptionDTO -> reencryptionDTO.getMessageCipher())
|
|
|
|
.collect(Collectors.toList());
|
2019-10-22 12:12:18 +00:00
|
|
|
messageCipherRepository.saveAll(messageCiphers);
|
|
|
|
}
|
|
|
|
|
2019-10-02 16:25:46 +00:00
|
|
|
}
|