diff --git a/pom.xml b/pom.xml
index e4a2089..f975ef6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,7 +13,7 @@
io.github.enkarin
chef-bot
- 2.8.3
+ 2.8.4
Chef Bot
@@ -301,7 +301,7 @@
LINE
MISSEDCOUNT
- 52
+ 53
diff --git a/src/main/java/io/github/enkarin/chefbot/adapters/TelegramAdapter.java b/src/main/java/io/github/enkarin/chefbot/adapters/TelegramAdapter.java
index 14b6825..10769b2 100644
--- a/src/main/java/io/github/enkarin/chefbot/adapters/TelegramAdapter.java
+++ b/src/main/java/io/github/enkarin/chefbot/adapters/TelegramAdapter.java
@@ -82,6 +82,7 @@ private void processingResponse(final long chatId, final OperationResult operati
if (action instanceof ModerationResultDto moderationResultDto) {
sendDeclineResultToOwner(moderationResultDto);
} else if (action instanceof ModerationDishDto moderationDishDto) {
+ moderationDishDto.getOldModerationRequests().forEach(this::deleteOddRequestMessage);
telegramController.addRequestMessages(moderationDishDto.getRequestId(),
sendModerationRequests(telegramController.findAvailableModeratorsId(moderationDishDto.getOwnerChatId()), moderationDishDto));
} else if (action instanceof List> dishDtoList) {
diff --git a/src/main/java/io/github/enkarin/chefbot/dto/ModerationDishDto.java b/src/main/java/io/github/enkarin/chefbot/dto/ModerationDishDto.java
index f124aaa..35a9cae 100644
--- a/src/main/java/io/github/enkarin/chefbot/dto/ModerationDishDto.java
+++ b/src/main/java/io/github/enkarin/chefbot/dto/ModerationDishDto.java
@@ -20,6 +20,7 @@ public class ModerationDishDto {
private WorldCuisine worldCuisine;
private Set products;
private String recipe;
+ private Set oldModerationRequests;
@Override
public String toString() {
diff --git a/src/main/java/io/github/enkarin/chefbot/pipelinehandlers/exclude/AddExcludeProductInputHandler.java b/src/main/java/io/github/enkarin/chefbot/pipelinehandlers/exclude/AddExcludeProductInputHandler.java
index 072dd92..bff8fb2 100644
--- a/src/main/java/io/github/enkarin/chefbot/pipelinehandlers/exclude/AddExcludeProductInputHandler.java
+++ b/src/main/java/io/github/enkarin/chefbot/pipelinehandlers/exclude/AddExcludeProductInputHandler.java
@@ -16,7 +16,7 @@ public class AddExcludeProductInputHandler implements NonCommandInputHandler {
@Override
public ExecutionResult execute(final long userId, final String text) {
service.addExcludeProducts(userId, text.split("[\n,]"));
- return new ExecutionResult(ChatStatus.MAIN_MENU);
+ return new ExecutionResult(ChatStatus.EXCLUDE_PRODUCTS);
}
@Override
diff --git a/src/main/java/io/github/enkarin/chefbot/pipelinehandlers/exclude/DeleteExcludeProductsByNameInputHandler.java b/src/main/java/io/github/enkarin/chefbot/pipelinehandlers/exclude/DeleteExcludeProductsByNameInputHandler.java
index b606be4..5e04c7a 100644
--- a/src/main/java/io/github/enkarin/chefbot/pipelinehandlers/exclude/DeleteExcludeProductsByNameInputHandler.java
+++ b/src/main/java/io/github/enkarin/chefbot/pipelinehandlers/exclude/DeleteExcludeProductsByNameInputHandler.java
@@ -16,7 +16,7 @@ public class DeleteExcludeProductsByNameInputHandler implements NonCommandInputH
@Override
public ExecutionResult execute(final long userId, final String text) {
service.deleteExcludeProductsByEqualsNames(userId, text.split("[\n,]"));
- return new ExecutionResult(ChatStatus.MAIN_MENU);
+ return new ExecutionResult(ChatStatus.EXCLUDE_PRODUCTS);
}
@Override
diff --git a/src/main/java/io/github/enkarin/chefbot/pipelinehandlers/exclude/DeleteExcludeProductsContainsNameInputHandler.java b/src/main/java/io/github/enkarin/chefbot/pipelinehandlers/exclude/DeleteExcludeProductsContainsNameInputHandler.java
index 3a2f42a..82a2d90 100644
--- a/src/main/java/io/github/enkarin/chefbot/pipelinehandlers/exclude/DeleteExcludeProductsContainsNameInputHandler.java
+++ b/src/main/java/io/github/enkarin/chefbot/pipelinehandlers/exclude/DeleteExcludeProductsContainsNameInputHandler.java
@@ -16,7 +16,7 @@ public class DeleteExcludeProductsContainsNameInputHandler implements NonCommand
@Override
public ExecutionResult execute(final long userId, final String text) {
service.deleteExcludeProductsByLikeName(userId, text.split("[\n,]"));
- return new ExecutionResult(ChatStatus.MAIN_MENU);
+ return new ExecutionResult(ChatStatus.EXCLUDE_PRODUCTS);
}
@Override
diff --git a/src/main/java/io/github/enkarin/chefbot/service/ModerationService.java b/src/main/java/io/github/enkarin/chefbot/service/ModerationService.java
index d3c0d15..3a4e14e 100644
--- a/src/main/java/io/github/enkarin/chefbot/service/ModerationService.java
+++ b/src/main/java/io/github/enkarin/chefbot/service/ModerationService.java
@@ -18,6 +18,8 @@
import java.util.Set;
import java.util.stream.Collectors;
+import static java.util.Objects.isNull;
+
@Service
@Transactional
@RequiredArgsConstructor
@@ -30,11 +32,22 @@ public class ModerationService {
private final UserRepository userRepository;
public ModerationDishDto createModerationRequest(final long userId) {
- final ModerationRequest moderationRequest = moderationRequestRepository.save(ModerationRequest.builder()
- .moderationDish(userService.findUser(userId).getEditabledDish())
- .build());
+ final Dish editableDish = userService.findUser(userId).getEditabledDish();
+ final ModerationRequest moderationRequest;
+ final Set moderationRequestMessages;
+ if (isNull(editableDish.getModerationRequest())) {
+ moderationRequest = moderationRequestRepository.save(ModerationRequest.builder().moderationDish(editableDish).build());
+ moderationRequestMessages = Set.of();
+ } else {
+ moderationRequest = editableDish.getModerationRequest();
+ moderationRequestMessages = moderationRequest.getModerationRequestMessages().stream()
+ .map(moderationRequestMessageEntityDtoMapper::entityToDto)
+ .collect(Collectors.toSet());
+ moderationRequestMessageRepository.deleteAll(moderationRequest.getModerationRequestMessages());
+ }
final ModerationDishDto result = dishEntityModerationDtoMapper.entityToDto(moderationRequest.getModerationDish());
result.setRequestId(moderationRequest.getId());
+ result.setOldModerationRequests(moderationRequestMessages);
return result;
}
diff --git a/src/test/java/io/github/enkarin/chefbot/service/ModerationServiceTest.java b/src/test/java/io/github/enkarin/chefbot/service/ModerationServiceTest.java
index bc25ac0..3843c15 100644
--- a/src/test/java/io/github/enkarin/chefbot/service/ModerationServiceTest.java
+++ b/src/test/java/io/github/enkarin/chefbot/service/ModerationServiceTest.java
@@ -38,11 +38,12 @@ void init() {
@Test
void createModerationRequest() {
+ moderationRequestRepository.deleteAll();
dishService.initDishName(USER_ID, "newDish");
moderationService.createModerationRequest(USER_ID);
- assertThat(moderationRequestRepository.findAll()).extracting(ModerationRequest::getModerationDish).extracting(Dish::getDishName).contains("newDish");
+ assertThat(moderationRequestRepository.findAll()).hasSize(1).extracting(ModerationRequest::getModerationDish).extracting(Dish::getDishName).contains("newDish");
}
@Test
@@ -101,4 +102,23 @@ void startModerate() {
String.class,
moderationRequestsId[3])).isEqualTo("fourthDish");
}
+
+ @Test
+ void createRepeatedModerationRequest() {
+ moderationRequestRepository.deleteAll();
+ dishService.initDishName(USER_ID, "newDish");
+ final long moderationRequestId = moderationService.createModerationRequest(USER_ID).getRequestId();
+ dishService.putDishRecipe(USER_ID, "Recipe");
+ moderationService.addRequestMessages(moderationRequestId, Set.of(new ModerationRequestMessageDto(1, CHAT_ID - 1)));
+
+ assertThat(moderationService.createModerationRequest(USER_ID).getOldModerationRequests())
+ .extracting(ModerationRequestMessageDto::chatId)
+ .containsOnly(CHAT_ID - 1);
+ assertThat(moderationRequestRepository.findAll())
+ .hasSize(1)
+ .extracting(ModerationRequest::getModerationDish)
+ .extracting(Dish::getDishName)
+ .contains("newDish");
+ assertThat(moderationRequestMessageRepository.count()).isZero();
+ }
}
diff --git a/src/test/java/io/github/enkarin/chefbot/service/pipelines/ProcessingFacadeTest.java b/src/test/java/io/github/enkarin/chefbot/service/pipelines/ProcessingFacadeTest.java
index 8a572d6..ba6e24b 100644
--- a/src/test/java/io/github/enkarin/chefbot/service/pipelines/ProcessingFacadeTest.java
+++ b/src/test/java/io/github/enkarin/chefbot/service/pipelines/ProcessingFacadeTest.java
@@ -440,7 +440,7 @@ void addExcludeProduct() {
assertThat(processingFacade.execute(USER_ID, "добавить продукты в список").botAnswer().messageText())
.isEqualTo("Введите названия продуктов, которые хотите добавить в список, через запятую или с новой строки");
assertThat(processingFacade.execute(USER_ID, "first, second").botAnswer().messageText())
- .isEqualTo("Вы в главном меню. Выберете следующую команду для выполнения.");
+ .startsWith("Список продуктов, блюда с которыми будут исключены из поиска:");
assertThat(excludeUserProductsService.findExcludeProducts(USER_ID)).containsOnly("firstProduct", "secondProduct");
}
@@ -453,7 +453,7 @@ void deleteExcludeProductByName() {
assertThat(processingFacade.execute(USER_ID, "удалить продукты из списка по полному названию").botAnswer().messageText())
.isEqualTo("Введите названия продуктов, которые хотите исключить из списка, через запятую или с новой строки");
assertThat(processingFacade.execute(USER_ID, "firstProduct, secondProduct").botAnswer().messageText())
- .isEqualTo("Вы в главном меню. Выберете следующую команду для выполнения.");
+ .startsWith("Список продуктов, блюда с которыми будут исключены из поиска:");
assertThat(excludeUserProductsService.findExcludeProducts(USER_ID)).containsOnly("thirdProduct");
}
@@ -466,7 +466,7 @@ void deleteExcludeProductContainsName() {
assertThat(processingFacade.execute(USER_ID, "удалить продукты из списка по частичному названию").botAnswer().messageText())
.isEqualTo("Введите названия продуктов, которые хотите исключить из списка, через запятую или с новой строки");
assertThat(processingFacade.execute(USER_ID, "first, third").botAnswer().messageText())
- .isEqualTo("Вы в главном меню. Выберете следующую команду для выполнения.");
+ .startsWith("Список продуктов, блюда с которыми будут исключены из поиска:");
assertThat(excludeUserProductsService.findExcludeProducts(USER_ID)).containsOnly("secondProduct");
}
}