diff --git a/src/main/java/ru/bvn13/jircbot/database/entities/DeferredMessage.java b/src/main/java/ru/bvn13/jircbot/database/entities/DeferredMessage.java index 1c506ed..115e2b2 100644 --- a/src/main/java/ru/bvn13/jircbot/database/entities/DeferredMessage.java +++ b/src/main/java/ru/bvn13/jircbot/database/entities/DeferredMessage.java @@ -28,6 +28,10 @@ public class DeferredMessage extends BaseModel { @Setter private String recipient; + @Getter + @Setter + private String recipientIdent; + @Getter @Setter @Type(type = "text") diff --git a/src/main/java/ru/bvn13/jircbot/database/repositories/DeferredMessageRepository.java b/src/main/java/ru/bvn13/jircbot/database/repositories/DeferredMessageRepository.java index f9a1f3b..5e7a120 100644 --- a/src/main/java/ru/bvn13/jircbot/database/repositories/DeferredMessageRepository.java +++ b/src/main/java/ru/bvn13/jircbot/database/repositories/DeferredMessageRepository.java @@ -2,6 +2,7 @@ package ru.bvn13.jircbot.database.repositories; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import ru.bvn13.jircbot.database.entities.DeferredMessage; @@ -13,4 +14,7 @@ import java.util.List; @Repository public interface DeferredMessageRepository extends JpaRepository { List getDeferredMessagesByChannelNameAndRecipientAndSentOrderByDtCreated(String channelName, String recipient, Boolean sent); + @Query(nativeQuery=true, + value = "select d.* from DeferredMessage as d where d.channelName = :channelName and d.recipientIdent regexp :ident and d.sent = :sent") + List getDeferredMessagesByChannelNameAndRecipientIdentAndSentOrderByDtCreated(@Param("channelName") String channelName, @Param("ident") String recipientIdent, @Param("sent") Boolean sent); } diff --git a/src/main/java/ru/bvn13/jircbot/database/services/DeferredMessageService.java b/src/main/java/ru/bvn13/jircbot/database/services/DeferredMessageService.java index 37afb2a..dca1b2f 100644 --- a/src/main/java/ru/bvn13/jircbot/database/services/DeferredMessageService.java +++ b/src/main/java/ru/bvn13/jircbot/database/services/DeferredMessageService.java @@ -6,9 +6,12 @@ import org.springframework.transaction.annotation.Transactional; import ru.bvn13.jircbot.database.entities.DeferredMessage; import ru.bvn13.jircbot.database.repositories.DeferredMessageRepository; +import java.util.Collection; import java.util.Date; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * Created by bvn13 on 31.01.2018. @@ -19,8 +22,10 @@ public class DeferredMessageService { @Autowired private DeferredMessageRepository deferredMessageRepository; - public List getDeferredMessagesForUser(String channelName, String user) { - return deferredMessageRepository.getDeferredMessagesByChannelNameAndRecipientAndSentOrderByDtCreated(channelName, user.toLowerCase(), false); + public List getDeferredMessagesForUser(String channelName, String user, String ident) { + List messagesByNickname = deferredMessageRepository.getDeferredMessagesByChannelNameAndRecipientAndSentOrderByDtCreated(channelName, user.toLowerCase(), false); + List messagesByIdent = deferredMessageRepository.getDeferredMessagesByChannelNameAndRecipientIdentAndSentOrderByDtCreated(channelName, ident, false); + return Stream.concat(messagesByNickname.stream(), messagesByIdent.stream()).collect(Collectors.toList()); } public void saveDeferredMessage(String channelName, String sender, String recipient, String message) { @@ -39,9 +44,9 @@ public class DeferredMessageService { } @Transactional - public int forgetAllMessages(String channelName, String recipient) { + public int forgetAllMessages(String channelName, String recipient, String ident) { AtomicInteger count = new AtomicInteger(0); - List messages = getDeferredMessagesForUser(channelName, recipient); + List messages = getDeferredMessagesForUser(channelName, recipient, ident); messages.forEach(msg -> { count.set(count.get()+1); msg.setSent(true); diff --git a/src/main/java/ru/bvn13/jircbot/listeners/DeferredMessagesListener.java b/src/main/java/ru/bvn13/jircbot/listeners/DeferredMessagesListener.java index f10a013..31a3201 100644 --- a/src/main/java/ru/bvn13/jircbot/listeners/DeferredMessagesListener.java +++ b/src/main/java/ru/bvn13/jircbot/listeners/DeferredMessagesListener.java @@ -47,6 +47,7 @@ public class DeferredMessagesListener extends ImprovedListenerAdapter { String userName = event.getUser().getNick(); String channelName = this.getChannelName(event); + String userIdent = event.getUser().getIdent(); if (event.getMessage().startsWith(COMMAND)) { String message = event.getMessage().replace(COMMAND, "").trim(); @@ -71,10 +72,10 @@ public class DeferredMessagesListener extends ImprovedListenerAdapter { } } } else if (event.getMessage().startsWith(COMMAND_FORGET)) { - int count = deferredMessageService.forgetAllMessages(channelName, userName); + int count = deferredMessageService.forgetAllMessages(channelName, userName, userIdent); this.sendNotice(event, "All "+count+" messages to "+userName+" were deleted"); } else if (event.getMessage().startsWith(COMMAND_READ)) { - List deferredMessages = deferredMessageService.getDeferredMessagesForUser(channelName, userName); + List deferredMessages = deferredMessageService.getDeferredMessagesForUser(channelName, userName, userIdent); deferredMessages.forEach(msg -> { event.respondPrivateMessage("User "+msg.getSender()+" at "+dt.format(msg.getDtCreated())+" told you: "+msg.getMessage()); deferredMessageService.markMessageWasSent(msg); @@ -88,7 +89,7 @@ public class DeferredMessagesListener extends ImprovedListenerAdapter { private void sendDeferredMessage(final MessageEvent event) { - List deferredMessages = deferredMessageService.getDeferredMessagesForUser(this.getChannelName(event), event.getUser().getNick().toLowerCase()); + List deferredMessages = deferredMessageService.getDeferredMessagesForUser(this.getChannelName(event), event.getUser().getNick().toLowerCase(), event.getUser().getIdent()); if (deferredMessages != null && deferredMessages.size() > 0) { DeferredMessage msg = deferredMessages.get(0); String more = "" + (deferredMessages.size() > 1 ? " ("+(deferredMessages.size()-1)+" message/-s more)" : ""); @@ -105,7 +106,7 @@ public class DeferredMessagesListener extends ImprovedListenerAdapter { return; } - List deferredMessages = deferredMessageService.getDeferredMessagesForUser(this.getChannelName(event), event.getUser().getNick().toLowerCase()); + List deferredMessages = deferredMessageService.getDeferredMessagesForUser(this.getChannelName(event), event.getUser().getNick().toLowerCase(), event.getUser().getIdent()); if (deferredMessages != null && deferredMessages.size() > 0) { event.respond("You have "+deferredMessages.size()+" unread message(-s)"); }