forked from Sanders/TelegaBot
Add saving logic
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user