package nju.seec.helper.service.impl; import nju.seec.helper.aspect.auth.LoginUser; import nju.seec.helper.dao.MessageDAO; import nju.seec.helper.dto.message.MessageDTO; import nju.seec.helper.entity.Message; import nju.seec.helper.enums.MessageType; import nju.seec.helper.service.MessageService; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Set; import java.util.stream.Collectors; /** * @author cst */ @Service public class MessageServiceImpl implements MessageService { private final MessageDAO messageDAO; public MessageServiceImpl(MessageDAO messageDAO) { this.messageDAO = messageDAO; } @Async @Override public void createMessage(Set toUserIds, MessageType type, String content, Long refId) { messageDAO.saveAll( toUserIds.parallelStream() .map(toUserId -> new Message() .setToUserId(toUserId) .setType(type) .setContent(content) .setRefId(refId)) .collect(Collectors.toSet())); } @Transactional(rollbackFor = Exception.class) @Override public void deleteMessages(LoginUser user, MessageDTO messageDTO) { messageDAO.deleteByToUserIdAndIdIn(user.getId(), messageDTO.getIds()); } @Transactional(rollbackFor = Exception.class) @Override public void readMessages(LoginUser user, MessageDTO messageDTO) { messageDAO.updateRead(user.getId(), messageDTO.getIds()); } @Transactional(readOnly = true) @Override public Page getUnreadMessages(LoginUser user, String key, Pageable pageable) { return messageDAO.findByToUserIdAndReadAndContentContains(user.getId(), false, key, pageable); } @Transactional(readOnly = true) @Override public Page getReadMessages(LoginUser user, String key, Pageable pageable) { return messageDAO.findByToUserIdAndReadAndContentContains(user.getId(), true, key, pageable); } }