From 3722571ed8b1a80dcac85a23578e0c29342c80df Mon Sep 17 00:00:00 2001 From: Aleksey Date: Wed, 25 Dec 2024 02:02:35 +0700 Subject: [PATCH 1/3] Change return status for exclude products handlers --- .../exclude/AddExcludeProductInputHandler.java | 2 +- .../exclude/DeleteExcludeProductsByNameInputHandler.java | 2 +- .../DeleteExcludeProductsContainsNameInputHandler.java | 2 +- .../chefbot/service/pipelines/ProcessingFacadeTest.java | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) 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/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"); } } From e128ed750c083ecc24ffc93d0e0bd980a1947477 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Sun, 2 Mar 2025 16:36:40 +0700 Subject: [PATCH 2/3] Fix ModerationService.createModerationRequest for can create repeated moderation request --- .../chefbot/service/ModerationService.java | 12 +++++++++--- .../chefbot/service/ModerationServiceTest.java | 15 ++++++++++++++- 2 files changed, 23 insertions(+), 4 deletions(-) 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..1d8cfe1 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,9 +32,13 @@ 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; + if (isNull(editableDish.getModerationRequest())) { + moderationRequest = moderationRequestRepository.save(ModerationRequest.builder().moderationDish(editableDish).build()); + } else { + moderationRequest = editableDish.getModerationRequest(); + } final ModerationDishDto result = dishEntityModerationDtoMapper.entityToDto(moderationRequest.getModerationDish()); result.setRequestId(moderationRequest.getId()); 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..c7c1f7a 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,16 @@ void startModerate() { String.class, moderationRequestsId[3])).isEqualTo("fourthDish"); } + + @Test + void createRepeatedModerationRequest() { + moderationRequestRepository.deleteAll(); + dishService.initDishName(USER_ID, "newDish"); + moderationService.createModerationRequest(USER_ID); + dishService.putDishRecipe(USER_ID, "Recipe"); + + moderationService.createModerationRequest(USER_ID); + + assertThat(moderationRequestRepository.findAll()).hasSize(1).extracting(ModerationRequest::getModerationDish).extracting(Dish::getDishName).contains("newDish"); + } } From 1e6bc015d906e04b24a6685d20c3fb3f7946f2be Mon Sep 17 00:00:00 2001 From: Aleksey Date: Sun, 2 Mar 2025 19:25:35 +0700 Subject: [PATCH 3/3] Fix ModerationService.createModerationRequest for delete old moderation request --- pom.xml | 4 ++-- .../chefbot/adapters/TelegramAdapter.java | 1 + .../enkarin/chefbot/dto/ModerationDishDto.java | 1 + .../chefbot/service/ModerationService.java | 7 +++++++ .../chefbot/service/ModerationServiceTest.java | 17 ++++++++++++----- 5 files changed, 23 insertions(+), 7 deletions(-) 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/service/ModerationService.java b/src/main/java/io/github/enkarin/chefbot/service/ModerationService.java index 1d8cfe1..3a4e14e 100644 --- a/src/main/java/io/github/enkarin/chefbot/service/ModerationService.java +++ b/src/main/java/io/github/enkarin/chefbot/service/ModerationService.java @@ -34,13 +34,20 @@ public class ModerationService { public ModerationDishDto createModerationRequest(final long userId) { 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 c7c1f7a..3843c15 100644 --- a/src/test/java/io/github/enkarin/chefbot/service/ModerationServiceTest.java +++ b/src/test/java/io/github/enkarin/chefbot/service/ModerationServiceTest.java @@ -107,11 +107,18 @@ void startModerate() { void createRepeatedModerationRequest() { moderationRequestRepository.deleteAll(); dishService.initDishName(USER_ID, "newDish"); - moderationService.createModerationRequest(USER_ID); + final long moderationRequestId = moderationService.createModerationRequest(USER_ID).getRequestId(); dishService.putDishRecipe(USER_ID, "Recipe"); - - moderationService.createModerationRequest(USER_ID); - - assertThat(moderationRequestRepository.findAll()).hasSize(1).extracting(ModerationRequest::getModerationDish).extracting(Dish::getDishName).contains("newDish"); + 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(); } }