refactor: Extract book creation logic into separate function

This commit is contained in:
2025-02-17 16:32:07 +03:00
parent a65e797b70
commit ebc27f3755
@@ -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, "📚 Спасибо за добавление книги!");
}
}
}