From ebc27f37550c5d470e43c535fcaa5d5d1f63621e Mon Sep 17 00:00:00 2001 From: "Sanders (aider)" Date: Mon, 17 Feb 2025 16:32:07 +0300 Subject: [PATCH] refactor: Extract book creation logic into separate function --- .../service/impl/BookCreationServiceImpl.java | 101 +++++++++--------- 1 file changed, 48 insertions(+), 53 deletions(-) diff --git a/src/main/java/ru/cathub/telegabot/service/impl/BookCreationServiceImpl.java b/src/main/java/ru/cathub/telegabot/service/impl/BookCreationServiceImpl.java index f877a71..7cef438 100644 --- a/src/main/java/ru/cathub/telegabot/service/impl/BookCreationServiceImpl.java +++ b/src/main/java/ru/cathub/telegabot/service/impl/BookCreationServiceImpl.java @@ -88,59 +88,7 @@ public class BookCreationServiceImpl implements BookCreationService { cache.setReadDate(readDate); bookCacheService.updateCache(user.getId(), cache); - // Создаем и сохраняем книгу - Book book = createBookFromCache(cache, user); - - // Очищаем кэш - bookCacheService.clearCache(user.getId()); - - // Отправляем подтверждение - String message = String.format("✅ Книга успешно добавлена\\!\n\n%s", bookCommonService.formatBookDetails(book)); - // Формируем статистику - LocalDate today = LocalDate.now(); - LocalDate endOfYear = LocalDate.of(today.getYear(), 12, 31); - Integer weeksLeft = Math.toIntExact(ChronoUnit.WEEKS.between(today, endOfYear)); - - BotUser freshUser = userRepository.findById(user.getId()).orElseThrow(); - int target = freshUser.getBooksToRead() != null ? freshUser.getBooksToRead() : 0; - int read = freshUser.getBooks() != null ? freshUser.getBooks().size() : 0; - int left = target - read; - - String stats; - if (left < 0) { - stats = formatBookMoreStats(weeksLeft, read); - } else if (left == 0) { - stats = ""; - try { - String prompt = String.format("Придумай креативное поздравление с тем, что пользователь выполнил большое достижение по прочтению цель по проятению %d книг на год",freshUser.getBooksToRead()); - - String congrat = openRouterService.getChatResponse(prompt, TextRole.DEFAULT); - - log.info("Congratulation target generated: {}", congrat); - telegramClientService.sendMessageWithMarkdown(user, "🎉 *Поздравляю с прочтением\\!*\n\n" + escapeNonMarkdown(congrat)); - } catch (Exception e) { - log.error("Error generating congratulation for user {}", user.getId(), e); - telegramClientService.sendMessage(user, "📚 Спасибо за добавление книги\\!"); - } - } else { - stats = formatBookLeftStats(weeksLeft, target, read, left); - } - telegramClientService.sendMessageWithMarkdown(user, message + stats); - - bookRepository.save(book); - - // Генерируем и отправляем поздравление - try { - String prompt = String.format("Придумай креативное поздравление с прочтением книги \"%s\" от автора \"%s\". " + "Учитывай что пользователь поставил оценку %d/10. ", cache.getTitle(),cache.getAuthor(), cache.getRating()); - - String congrat = openRouterService.getChatResponse(prompt, TextRole.DEFAULT); - - log.info("Congratulation generated: {}", congrat); - telegramClientService.sendMessageWithMarkdown(user, "🎉 *Поздравляю с прочтением\\!*\n\n" + escapeNonMarkdown(congrat)); - } catch (Exception e) { - log.error("Error generating congratulation for user {}", user.getId(), e); - telegramClientService.sendMessage(user, "📚 Спасибо за добавление книги!"); - } + createAndSaveBookFromCache(user, cache); } default -> { @@ -181,4 +129,51 @@ public class BookCreationServiceImpl implements BookCreationService { private Book createBookFromCache(BookCreationCache cache, BotUser user) { return Book.builder().title(cache.getTitle()).author(cache.getAuthor()).rating(cache.getRating()).readDate(cache.getReadDate()).botUser(user).build(); } + + private void createAndSaveBookFromCache(BotUser user, BookCreationCache cache) { + Book book = createBookFromCache(cache, user); + bookCacheService.clearCache(user.getId()); + + String message = String.format("✅ Книга успешно добавлена\\!\n\n%s", bookCommonService.formatBookDetails(book)); + + LocalDate today = LocalDate.now(); + LocalDate endOfYear = LocalDate.of(today.getYear(), 12, 31); + Integer weeksLeft = Math.toIntExact(ChronoUnit.WEEKS.between(today, endOfYear)); + + BotUser freshUser = userRepository.findById(user.getId()).orElseThrow(); + int target = freshUser.getBooksToRead() != null ? freshUser.getBooksToRead() : 0; + int read = freshUser.getBooks() != null ? freshUser.getBooks().size() : 0; + int left = target - read; + + String stats; + if (left < 0) { + stats = formatBookMoreStats(weeksLeft, read); + } else if (left == 0) { + stats = ""; + try { + String prompt = String.format("Придумай креативное поздравление с тем, что пользователь выполнил большое достижение по прочтению цель по проятению %d книг на год", freshUser.getBooksToRead()); + String congrat = openRouterService.getChatResponse(prompt, TextRole.DEFAULT); + log.info("Congratulation target generated: {}", congrat); + telegramClientService.sendMessageWithMarkdown(user, "🎉 *Поздравляю с прочтением\\!*\n\n" + escapeNonMarkdown(congrat)); + } catch (Exception e) { + log.error("Error generating congratulation for user {}", user.getId(), e); + telegramClientService.sendMessage(user, "📚 Спасибо за добавление книги\\!"); + } + } else { + stats = formatBookLeftStats(weeksLeft, target, read, left); + } + telegramClientService.sendMessageWithMarkdown(user, message + stats); + + bookRepository.save(book); + + try { + String prompt = String.format("Придумай креативное поздравление с прочтением книги \"%s\" от автора \"%s\". Учитывай что пользователь поставил оценку %d/10. ", cache.getTitle(), cache.getAuthor(), cache.getRating()); + String congrat = openRouterService.getChatResponse(prompt, TextRole.DEFAULT); + log.info("Congratulation generated: {}", congrat); + telegramClientService.sendMessageWithMarkdown(user, "🎉 *Поздравляю с прочтением\\!*\n\n" + escapeNonMarkdown(congrat)); + } catch (Exception e) { + log.error("Error generating congratulation for user {}", user.getId(), e); + telegramClientService.sendMessage(user, "📚 Спасибо за добавление книги!"); + } + } }