forked from Sanders/TelegaBot
refactor: Extract book creation logic into separate function
This commit is contained in:
@@ -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, "📚 Спасибо за добавление книги!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user