diff --git a/src/main/java/ru/cathub/telegabot/service/impl/BookEditingServiceImpl.java b/src/main/java/ru/cathub/telegabot/service/impl/BookEditingServiceImpl.java index 97b7753..d47cf17 100644 --- a/src/main/java/ru/cathub/telegabot/service/impl/BookEditingServiceImpl.java +++ b/src/main/java/ru/cathub/telegabot/service/impl/BookEditingServiceImpl.java @@ -38,12 +38,13 @@ public class BookEditingServiceImpl implements BookEditingService { bookCache = BookEditStateCache.builder().bookEditState(BookEditStateCache.BookEditState.NONE).bookId(bookId).build(); } bookCacheService.updateBookEditCache(user.getId(), bookCache); - if (book.isPresent()) { - log.info("Found book with id {}", bookId); - telegramClientService.sendMessage(user, "Выберите поле для редактирования:", getEditOptions(user)); - } else { - telegramClientService.sendMessage(user, Constants.ERROR_BOOK_NOT_FOUND); - } + book.ifPresentOrElse( + b -> { + log.info("Found book with id {}", bookId); + telegramClientService.sendMessage(user, "Выберите поле для редактирования:", getEditOptions(user)); + }, + () -> telegramClientService.sendMessage(user, Constants.ERROR_BOOK_NOT_FOUND) + ); } catch (NumberFormatException e) { telegramClientService.sendMessage(user, Constants.ERROR_INVALID_BOOK_ID); } diff --git a/src/main/java/ru/cathub/telegabot/service/impl/BookListingServiceImpl.java b/src/main/java/ru/cathub/telegabot/service/impl/BookListingServiceImpl.java index db29074..afb428a 100644 --- a/src/main/java/ru/cathub/telegabot/service/impl/BookListingServiceImpl.java +++ b/src/main/java/ru/cathub/telegabot/service/impl/BookListingServiceImpl.java @@ -65,37 +65,6 @@ public class BookListingServiceImpl implements BookListingService { } private String formatBookEntry(Book book, int index, boolean forEdit) { - if (forEdit) { - return String.format("%s %s *%s*\n" + "✍️ _%s_\n" + "🏆 %s\n" + - "▔▔▔▔▔▔▔▔▔▔▔▔▔▔\n", String.valueOf((char) ('0' + index + 1)) + "\uFE0F\u20E3", getBookIcon(index), escapeMarkdown(book.getTitle()), escapeMarkdown(book.getAuthor()), escapeMarkdown(formatRating(book.getRating()))); - } - return String.format("%s *%s*\n" + "✍️ _%s_\n" + "🏆 %s\n" + - "▔▔▔▔▔▔▔▔▔▔▔▔▔▔\n", getBookIcon(index), escapeMarkdown(book.getTitle()), escapeMarkdown(book.getAuthor()), escapeMarkdown(formatRating(book.getRating()))); - } - - private String getBookIcon(int index) { - return Constants.BOOK_ICONS[index % Constants.BOOK_ICONS.length]; - } - - private String escapeMarkdown(String text) { - return text.replaceAll("([_*\\[\\]()~`>#+=|{}.!-])", "\\\\$1"); - } - - public static String formatRating(int rating) { - int validatedRating = Math.min(10, Math.max(0, rating)); - - StringBuilder sb = new StringBuilder(); - - for (int i = 0; i < validatedRating; i++) { - sb.append(FULL_STAR); - } - - for (int i = validatedRating; i < 10; i++) { - sb.append(EMPTY_STAR); - } - - sb.append(" (").append(validatedRating).append("/10)"); - - return sb.toString(); + return BookFormatUtils.formatBookEntry(book, index, forEdit); } } diff --git a/src/main/java/ru/cathub/telegabot/service/impl/BookManageServiceImpl.java b/src/main/java/ru/cathub/telegabot/service/impl/BookManageServiceImpl.java index cb96c58..dcca07a 100644 --- a/src/main/java/ru/cathub/telegabot/service/impl/BookManageServiceImpl.java +++ b/src/main/java/ru/cathub/telegabot/service/impl/BookManageServiceImpl.java @@ -35,27 +35,6 @@ public class BookManageServiceImpl implements BookManageService { private final TelegramClientService telegramClientService; - public static String formatRating(int rating) { - // Ограничиваем рейтинг в диапазоне 0-10 - int validatedRating = Math.min(Constants.MAX_RATING, Math.max(Constants.MIN_RATING, rating)); - - StringBuilder sb = new StringBuilder(); - - // Добавляем заполненные звезды - for (int i = 0; i < validatedRating; i++) { - sb.append(FULL_STAR); - } - - // Добавляем пустые звезды - for (int i = validatedRating; i < 10; i++) { - sb.append(EMPTY_STAR); - } - - // Добавляем текстовое представление - sb.append(" (").append(validatedRating).append("/10)"); - - return sb.toString(); - } @Override public void processBookInput(BotUser user, String text) { @@ -86,30 +65,17 @@ public class BookManageServiceImpl implements BookManageService { return; } switch (editCache.getBookEditState()) { - case ADDING_TITLE: + case ADDING_TITLE, ADDING_AUTHOR, ADDING_RATING -> bookCreationService.handleExistingAddCache(user, text); - break; - case ADDING_AUTHOR: - bookCreationService.handleExistingAddCache(user, text); - break; - case ADDING_RATING: - bookCreationService.handleExistingAddCache(user, text); - break; - case SELECTING_BOOK: + case SELECTING_BOOK -> bookCreationService.handleNewAddRequest(user, text); - break; - case CHOOSING_FIELD: - //handleExistingAddCache(user, text); - break; - case EDITING_TITLE: + case EDITING_TITLE -> bookEditingService.updateBookTitle(user, text); - break; - case EDITING_AUTHOR: + case EDITING_AUTHOR -> bookEditingService.updateBookAuthor(user, text); - break; - case EDITING_RATING: + case EDITING_RATING -> bookEditingService.updateBookRating(user, text); - break; + case CHOOSING_FIELD -> {} // No action needed } } diff --git a/src/main/java/ru/cathub/telegabot/utils/BookFormatUtils.java b/src/main/java/ru/cathub/telegabot/utils/BookFormatUtils.java new file mode 100644 index 0000000..b898dfd --- /dev/null +++ b/src/main/java/ru/cathub/telegabot/utils/BookFormatUtils.java @@ -0,0 +1,38 @@ +package ru.cathub.telegabot.utils; + +import ru.cathub.telegabot.model.Book; +import static ru.cathub.telegabot.utils.Constants.*; + +public class BookFormatUtils { + + public static String formatBookEntry(Book book, int index, boolean forEdit) { + String prefix = forEdit ? + String.valueOf((char) ('0' + index + 1)) + "\uFE0F\u20E3 " : ""; + + return String.format("%s%s *%s*\n✍️ _%s_\n🏆 %s\n▔▔▔▔▔▔▔▔▔▔▔▔▔▔\n", + prefix, + getBookIcon(index), + escapeMarkdown(book.getTitle()), + escapeMarkdown(book.getAuthor()), + escapeMarkdown(formatRating(book.getRating()))); + } + + public static String getBookIcon(int index) { + return BOOK_ICONS[index % BOOK_ICONS.length]; + } + + public static String escapeMarkdown(String text) { + return text.replaceAll("([_*\\[\\]()~`>#+=|{}.!-])", "\\\\$1"); + } + + public static String formatRating(int rating) { + int validatedRating = Math.min(MAX_RATING, Math.max(MIN_RATING, rating)); + StringBuilder sb = new StringBuilder(); + + sb.append(FULL_STAR.repeat(validatedRating)) + .append(EMPTY_STAR.repeat(MAX_RATING - validatedRating)) + .append(String.format(" (%d/%d)", validatedRating, MAX_RATING)); + + return sb.toString(); + } +}