Рефакторгин пре-процессинга перед отправкой сообщения

This commit is contained in:
Struchkov Mark 2022-12-12 10:25:13 +03:00
parent 78cc771852
commit 3ec635eb77
5 changed files with 32 additions and 55 deletions

View File

@ -11,22 +11,22 @@ import static dev.struchkov.haiti.utils.Inspector.isNotNull;
public class SenderMapRepository implements SenderRepository { public class SenderMapRepository implements SenderRepository {
private final Map<Long, Integer> lastMessageId = new HashMap<>(); private final Map<String, Integer> lastMessageId = new HashMap<>();
@Override @Override
public Uni<Integer> getLastSendMessage(Long telegramId) { public Uni<Integer> getLastSendMessage(String telegramId) {
return Uni.createFrom().item(lastMessageId.get(telegramId)); return Uni.createFrom().item(lastMessageId.get(telegramId));
} }
@Override @Override
public Uni<Void> saveLastSendMessage(@NotNull Long telegramId, @NotNull Integer messageId) { public Uni<Void> saveLastSendMessage(@NotNull String telegramId, @NotNull Integer messageId) {
isNotNull(telegramId); isNotNull(telegramId);
lastMessageId.put(telegramId, messageId); lastMessageId.put(telegramId, messageId);
return Uni.createFrom().voidItem(); return Uni.createFrom().voidItem();
} }
@Override @Override
public Uni<Void> removeLastSendMessage(Long telegramId) { public Uni<Void> removeLastSendMessage(String telegramId) {
lastMessageId.remove(telegramId); lastMessageId.remove(telegramId);
return Uni.createFrom().voidItem(); return Uni.createFrom().voidItem();
} }

View File

@ -1,13 +0,0 @@
package dev.struchkov.godfather.telegram.quarkus.sender;
/**
* // TODO: 18.09.2020 Добавить описание.
*
* @author upagge 18.09.2020
*/
@FunctionalInterface
public interface SendPreProcessing {
String pretreatment(String messageText);
}

View File

@ -2,6 +2,7 @@ package dev.struchkov.godfather.telegram.quarkus.sender;
import dev.struchkov.godfather.main.domain.BoxAnswer; import dev.struchkov.godfather.main.domain.BoxAnswer;
import dev.struchkov.godfather.main.domain.SendType; import dev.struchkov.godfather.main.domain.SendType;
import dev.struchkov.godfather.quarkus.context.service.PreSendProcessing;
import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard; import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard;
import dev.struchkov.godfather.telegram.main.context.TelegramConnect; import dev.struchkov.godfather.telegram.main.context.TelegramConnect;
import dev.struchkov.godfather.telegram.main.sender.util.KeyBoardConvert; import dev.struchkov.godfather.telegram.main.sender.util.KeyBoardConvert;
@ -18,9 +19,10 @@ import org.telegram.telegrambots.meta.bots.AbsSender;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException; import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
import org.telegram.telegrambots.meta.exceptions.TelegramApiRequestException; import org.telegram.telegrambots.meta.exceptions.TelegramApiRequestException;
import java.util.List;
import static dev.struchkov.godfather.telegram.main.sender.util.KeyBoardConvert.convertInlineKeyBoard; import static dev.struchkov.godfather.telegram.main.sender.util.KeyBoardConvert.convertInlineKeyBoard;
import static dev.struchkov.haiti.utils.Checker.checkNotNull; import static dev.struchkov.haiti.utils.Checker.checkNotNull;
import static dev.struchkov.haiti.utils.Inspector.isNotNull;
public class TelegramSender implements TelegramSending { public class TelegramSender implements TelegramSending {
@ -30,7 +32,8 @@ public class TelegramSender implements TelegramSending {
private final AbsSender absSender; private final AbsSender absSender;
private SendPreProcessing sendPreProcessing; //TODO [09.12.2022|uPagge]: Доработать использование preSendProcessors
private List<PreSendProcessing> preSendProcessors;
private SenderRepository senderRepository; private SenderRepository senderRepository;
public TelegramSender(TelegramConnect telegramConnect) { public TelegramSender(TelegramConnect telegramConnect) {
@ -42,11 +45,7 @@ public class TelegramSender implements TelegramSending {
this.senderRepository = senderRepository; this.senderRepository = senderRepository;
} }
public void setSendPreProcessing(SendPreProcessing sendPreProcessing) { public void setSenderRepository(SenderRepository senderRepository) {
this.sendPreProcessing = sendPreProcessing;
}
public void setSenderRepository(SenderRepository senderStorageService) {
this.senderRepository = senderRepository; this.senderRepository = senderRepository;
} }
@ -55,6 +54,11 @@ public class TelegramSender implements TelegramSending {
return sendBoxAnswer(telegramId, boxAnswer, true); return sendBoxAnswer(telegramId, boxAnswer, true);
} }
@Override
public void addPreSendProcess(@NotNull PreSendProcessing processing) {
preSendProcessors.add(processing);
}
@Override @Override
public Uni<Void> sendNotSave(@NotNull String telegramId, @NotNull BoxAnswer boxAnswer) { public Uni<Void> sendNotSave(@NotNull String telegramId, @NotNull BoxAnswer boxAnswer) {
return sendBoxAnswer(telegramId, boxAnswer, false); return sendBoxAnswer(telegramId, boxAnswer, false);
@ -64,8 +68,6 @@ public class TelegramSender implements TelegramSending {
return Uni.createFrom().voidItem() return Uni.createFrom().voidItem()
.onItem().transformToUni( .onItem().transformToUni(
v -> { v -> {
isNotNull(telegramId, boxAnswer);
if (boxAnswer.isReplace() && checkNotNull(senderRepository)) { if (boxAnswer.isReplace() && checkNotNull(senderRepository)) {
return senderRepository.getLastSendMessage(telegramId) return senderRepository.getLastSendMessage(telegramId)
.onItem().transformToUni( .onItem().transformToUni(
@ -89,7 +91,7 @@ public class TelegramSender implements TelegramSending {
.onItem().transformToUni( .onItem().transformToUni(
v -> { v -> {
final EditMessageText editMessageText = new EditMessageText(); final EditMessageText editMessageText = new EditMessageText();
editMessageText.setChatId(String.valueOf(telegramId)); editMessageText.setChatId(telegramId);
editMessageText.setMessageId(lastMessageId); editMessageText.setMessageId(lastMessageId);
editMessageText.enableMarkdown(true); editMessageText.enableMarkdown(true);
editMessageText.setText(boxAnswer.getMessage()); editMessageText.setText(boxAnswer.getMessage());
@ -111,11 +113,7 @@ public class TelegramSender implements TelegramSending {
final SendMessage sendMessage = new SendMessage(); final SendMessage sendMessage = new SendMessage();
sendMessage.enableMarkdown(true); sendMessage.enableMarkdown(true);
sendMessage.setChatId(telegramId); sendMessage.setChatId(telegramId);
sendMessage.setText( sendMessage.setText(boxAnswer.getMessage());
sendPreProcessing != null
? sendPreProcessing.pretreatment(boxAnswer.getMessage())
: boxAnswer.getMessage()
);
sendMessage.setReplyMarkup(KeyBoardConvert.convertKeyBoard(boxAnswer.getKeyBoard())); sendMessage.setReplyMarkup(KeyBoardConvert.convertKeyBoard(boxAnswer.getKeyBoard()));
try { try {

View File

@ -1,13 +0,0 @@
package dev.struchkov.godfather.telegram.simple.sender;
/**
* // TODO: 18.09.2020 Добавить описание.
*
* @author upagge 18.09.2020
*/
@FunctionalInterface
public interface SendPreProcessing {
String pretreatment(String messageText);
}

View File

@ -2,6 +2,7 @@ package dev.struchkov.godfather.telegram.simple.sender;
import dev.struchkov.godfather.main.domain.BoxAnswer; import dev.struchkov.godfather.main.domain.BoxAnswer;
import dev.struchkov.godfather.main.domain.SendType; import dev.struchkov.godfather.main.domain.SendType;
import dev.struchkov.godfather.simple.context.service.PreSendProcessing;
import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard; import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard;
import dev.struchkov.godfather.telegram.main.context.TelegramConnect; import dev.struchkov.godfather.telegram.main.context.TelegramConnect;
import dev.struchkov.godfather.telegram.main.sender.util.KeyBoardConvert; import dev.struchkov.godfather.telegram.main.sender.util.KeyBoardConvert;
@ -17,6 +18,8 @@ import org.telegram.telegrambots.meta.bots.AbsSender;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException; import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
import org.telegram.telegrambots.meta.exceptions.TelegramApiRequestException; import org.telegram.telegrambots.meta.exceptions.TelegramApiRequestException;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional; import java.util.Optional;
import static dev.struchkov.haiti.utils.Checker.checkNotNull; import static dev.struchkov.haiti.utils.Checker.checkNotNull;
@ -30,7 +33,7 @@ public class TelegramSender implements TelegramSending {
private final AbsSender absSender; private final AbsSender absSender;
private SendPreProcessing sendPreProcessing; private List<PreSendProcessing> preSendProcessors = new ArrayList<>();
private SenderRepository senderRepository; private SenderRepository senderRepository;
public TelegramSender(TelegramConnect telegramConnect) { public TelegramSender(TelegramConnect telegramConnect) {
@ -42,10 +45,6 @@ public class TelegramSender implements TelegramSending {
this.senderRepository = senderRepository; this.senderRepository = senderRepository;
} }
public void setSendPreProcessing(SendPreProcessing sendPreProcessing) {
this.sendPreProcessing = sendPreProcessing;
}
public void setSenderRepository(SenderRepository senderRepository) { public void setSenderRepository(SenderRepository senderRepository) {
this.senderRepository = senderRepository; this.senderRepository = senderRepository;
} }
@ -55,6 +54,11 @@ public class TelegramSender implements TelegramSending {
sendBoxAnswer(telegramId, boxAnswer, true); sendBoxAnswer(telegramId, boxAnswer, true);
} }
@Override
public void addPreSendProcess(@NotNull PreSendProcessing processing) {
preSendProcessors.add(processing);
}
@Override @Override
public void sendNotSave(@NotNull String telegramId, @NotNull BoxAnswer boxAnswer) { public void sendNotSave(@NotNull String telegramId, @NotNull BoxAnswer boxAnswer) {
sendBoxAnswer(telegramId, boxAnswer, false); sendBoxAnswer(telegramId, boxAnswer, false);
@ -62,6 +66,11 @@ public class TelegramSender implements TelegramSending {
private void sendBoxAnswer(@NotNull String telegramId, @NotNull BoxAnswer boxAnswer, boolean saveMessageId) { private void sendBoxAnswer(@NotNull String telegramId, @NotNull BoxAnswer boxAnswer, boolean saveMessageId) {
isNotNull(telegramId, boxAnswer); isNotNull(telegramId, boxAnswer);
for (PreSendProcessing preSendProcessor : preSendProcessors) {
boxAnswer = preSendProcessor.pretreatment(boxAnswer);
}
try { try {
if (boxAnswer.isReplace() && checkNotNull(senderRepository)) { if (boxAnswer.isReplace() && checkNotNull(senderRepository)) {
final Optional<Integer> optLastId = senderRepository.getLastSendMessage(telegramId); final Optional<Integer> optLastId = senderRepository.getLastSendMessage(telegramId);
@ -97,11 +106,7 @@ public class TelegramSender implements TelegramSending {
final SendMessage sendMessage = new SendMessage(); final SendMessage sendMessage = new SendMessage();
sendMessage.enableMarkdown(true); sendMessage.enableMarkdown(true);
sendMessage.setChatId(telegramId); sendMessage.setChatId(telegramId);
sendMessage.setText( sendMessage.setText(boxAnswer.getMessage());
sendPreProcessing != null
? sendPreProcessing.pretreatment(boxAnswer.getMessage())
: boxAnswer.getMessage()
);
sendMessage.setReplyMarkup(KeyBoardConvert.convertKeyBoard(boxAnswer.getKeyBoard())); sendMessage.setReplyMarkup(KeyBoardConvert.convertKeyBoard(boxAnswer.getKeyBoard()));
try { try {
final Message execute = absSender.execute(sendMessage); final Message execute = absSender.execute(sendMessage);