Add saving logic

This commit is contained in:
2025-02-09 00:19:51 +03:00
parent c26a28709c
commit 668a2d328f
2 changed files with 76 additions and 17 deletions
@@ -1,6 +1,7 @@
package ru.cathub.telegabot.service.impl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import ru.cathub.telegabot.model.Book;
import ru.cathub.telegabot.model.BookCreationCache;
@@ -10,15 +11,19 @@ import ru.cathub.telegabot.service.BookCacheService;
import ru.cathub.telegabot.service.BookCreationService;
import ru.cathub.telegabot.service.BookManageService;
import ru.cathub.telegabot.service.TelegramClientService;
import ru.cathub.telegabot.utils.Constants;
import static ru.cathub.telegabot.utils.Constants.ADD_BOOK;
import static ru.cathub.telegabot.model.BookEditStateCache.BookEditState.*;
import static ru.cathub.telegabot.utils.Constants.*;
@Service
@RequiredArgsConstructor
@Slf4j
public class BookCreationServiceImpl implements BookCreationService {
private final BookCacheService bookCacheService;
private final TelegramClientService telegramClientService;
private final BookRepository bookRepository;
@Override
public void handleNewAddRequest(BotUser user, String text) {
@@ -32,23 +37,76 @@ public class BookCreationServiceImpl implements BookCreationService {
@Override
public void handleExistingAddCache(BotUser user, String text) {
BookCreationCache cache = bookCacheService.getCache(user.getId());
if (cache.getTitle() == null) {
cache.setTitle(text);
bookCacheService.updateCache(user.getId(), cache);
telegramClientService.sendMessageWithMarkdown(user, "*Укажите автора книги: ✍\uFE0F*", null);
} else if (cache.getAuthor() == null) {
cache.setAuthor(text);
bookCacheService.updateCache(user.getId(), cache);
telegramClientService.sendMessageWithMarkdown(user, "*Укажите рейтинг книги \\(целое число от 0 до 10\\): ⭐\uFE0F*", null);
} else {
try {
int rating = Integer.parseInt(text);
// Save book logic here
bookCacheService.clearCache(user.getId());
telegramClientService.sendMessage(user, "Книга сохранена!");
} catch (NumberFormatException e) {
telegramClientService.sendMessage(user, "Ошибка! Введите целое число");
if (cache == null) {
log.warn("No creation cache found for user {}", user.getId());
telegramClientService.sendMessage(user, "❌ Ошибка: не найдены данные для создания книги");
return;
}
try {
switch (cache.getCreationState()) {
case ADDING_TITLE -> {
cache.setTitle(text);
cache.setCreationState(BookCreationCache.CreationState.ADDING_AUTHOR);
bookCacheService.updateCache(user.getId(), cache);
telegramClientService.sendMessage(user, "✍️ Введите автора книги:");
}
case ADDING_AUTHOR -> {
cache.setAuthor(text);
cache.setCreationState(BookCreationCache.CreationState.ADDING_RATING);
bookCacheService.updateCache(user.getId(), cache);
telegramClientService.sendMessage(user, "⭐ Введите рейтинг книги (от 0 до 10):");
}
case ADDING_RATING -> {
int rating = validateAndParseRating(text);
cache.setRating(rating);
bookCacheService.updateCache(user.getId(), cache);
// Создаем и сохраняем книгу
Book book = createBookFromCache(cache, user);
bookRepository.save(book);
// Очищаем кэш
bookCacheService.clearCache(user.getId());
// Отправляем подтверждение
String message = String.format("✅ Книга успешно добавлена!\n\n%s",
bookCommonService.formatBookDetails(book));
telegramClientService.sendMessageWithMarkdown(user, message);
}
default -> {
log.warn("Invalid creation state for user {}", user.getId());
telegramClientService.sendMessage(user, "❌ Ошибка: неверное состояние создания книги");
}
}
} catch (NumberFormatException e) {
log.error("Invalid rating format for user {}", user.getId(), e);
telegramClientService.sendMessage(user, "❌ Ошибка: рейтинг должен быть числом от 0 до 10");
} catch (Exception e) {
log.error("Error creating book for user {}", user.getId(), e);
telegramClientService.sendMessage(user, "❌ Ошибка при создании книги");
bookCacheService.clearCache(user.getId());
}
}
private int validateAndParseRating(String text) throws NumberFormatException {
int rating = Integer.parseInt(text);
if (rating < Constants.MIN_RATING || rating > Constants.MAX_RATING) {
throw new NumberFormatException("Rating out of bounds");
}
return rating;
}
private Book createBookFromCache(BookCreationCache cache, BotUser user) {
return Book.builder()
.title(cache.getTitle())
.author(cache.getAuthor())
.rating(cache.getRating())
.botUser(user)
.build();
}
}
@@ -18,6 +18,7 @@ import ru.cathub.telegabot.model.BotUser;
import ru.cathub.telegabot.service.BookCacheService;
import ru.cathub.telegabot.service.BookListingService;
import ru.cathub.telegabot.service.TelegramClientService;
import ru.cathub.telegabot.utils.BookFormatUtils;
import ru.cathub.telegabot.utils.Constants;
@Service