added deferred messages stored by user ident (regexp pattern)

pull/6/head
Vyacheslav N. Boyko 2018-07-31 17:47:52 +03:00
parent 8079bb470d
commit e6ef25c935
4 changed files with 22 additions and 8 deletions

View File

@ -28,6 +28,10 @@ public class DeferredMessage extends BaseModel {
@Setter
private String recipient;
@Getter
@Setter
private String recipientIdent;
@Getter
@Setter
@Type(type = "text")

View File

@ -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<DeferredMessage, Long> {
List<DeferredMessage> 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<DeferredMessage> getDeferredMessagesByChannelNameAndRecipientIdentAndSentOrderByDtCreated(@Param("channelName") String channelName, @Param("ident") String recipientIdent, @Param("sent") Boolean sent);
}

View File

@ -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<DeferredMessage> getDeferredMessagesForUser(String channelName, String user) {
return deferredMessageRepository.getDeferredMessagesByChannelNameAndRecipientAndSentOrderByDtCreated(channelName, user.toLowerCase(), false);
public List<DeferredMessage> getDeferredMessagesForUser(String channelName, String user, String ident) {
List<DeferredMessage> messagesByNickname = deferredMessageRepository.getDeferredMessagesByChannelNameAndRecipientAndSentOrderByDtCreated(channelName, user.toLowerCase(), false);
List<DeferredMessage> 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<DeferredMessage> messages = getDeferredMessagesForUser(channelName, recipient);
List<DeferredMessage> messages = getDeferredMessagesForUser(channelName, recipient, ident);
messages.forEach(msg -> {
count.set(count.get()+1);
msg.setSent(true);

View File

@ -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<DeferredMessage> deferredMessages = deferredMessageService.getDeferredMessagesForUser(channelName, userName);
List<DeferredMessage> 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<DeferredMessage> deferredMessages = deferredMessageService.getDeferredMessagesForUser(this.getChannelName(event), event.getUser().getNick().toLowerCase());
List<DeferredMessage> 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<DeferredMessage> deferredMessages = deferredMessageService.getDeferredMessagesForUser(this.getChannelName(event), event.getUser().getNick().toLowerCase());
List<DeferredMessage> 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)");
}