Fix: TeleBot variant callbacks now use CallbackDataMapper to decode short IDs - fixes GUID parsing errors
This commit is contained in:
parent
76707eb565
commit
0801fb004c
@ -1268,11 +1268,16 @@ namespace TeleBot.Handlers
|
||||
private async Task HandleSelectVariant(ITelegramBotClient bot, Message message, UserSession session, string[] data)
|
||||
{
|
||||
// Format: selectvar:productId:quantity:multiBuyId
|
||||
var productId = Guid.Parse(data[1]);
|
||||
var quantity = int.Parse(data[2]);
|
||||
var multiBuyId = data.Length > 3 && data[3] != "null" ? data[3] : null;
|
||||
// Use mapper to decode short IDs back to GUIDs
|
||||
var (_, productId, quantity, multiBuyId) = _mapper.ParseCallback(string.Join(":", data));
|
||||
|
||||
var product = await _shopService.GetProductAsync(productId);
|
||||
if (!productId.HasValue || !quantity.HasValue)
|
||||
{
|
||||
_logger.LogError("Invalid callback data for selectvar: {Data}", string.Join(":", data));
|
||||
return;
|
||||
}
|
||||
|
||||
var product = await _shopService.GetProductAsync(productId.Value);
|
||||
if (product == null)
|
||||
{
|
||||
await bot.SendTextMessageAsync(message.Chat.Id, "Product not found.");
|
||||
@ -1281,14 +1286,14 @@ namespace TeleBot.Handlers
|
||||
|
||||
// Clear any previous selections
|
||||
session.TempData["selected_variants"] = new List<string>();
|
||||
session.TempData["current_product"] = productId;
|
||||
session.TempData["current_quantity"] = quantity;
|
||||
session.TempData["current_multibuy"] = multiBuyId;
|
||||
session.TempData["current_product"] = productId.Value;
|
||||
session.TempData["current_quantity"] = quantity.Value;
|
||||
session.TempData["current_multibuy"] = multiBuyId?.ToString();
|
||||
|
||||
await bot.EditMessageReplyMarkupAsync(
|
||||
message.Chat.Id,
|
||||
message.MessageId,
|
||||
replyMarkup: MenuBuilder.VariantSelectionMenu(product, quantity, multiBuyId)
|
||||
replyMarkup: MenuBuilder.VariantSelectionMenu(product, quantity.Value, multiBuyId?.ToString())
|
||||
);
|
||||
|
||||
session.State = SessionState.SelectingVariants;
|
||||
@ -1297,10 +1302,17 @@ namespace TeleBot.Handlers
|
||||
private async Task HandleSetVariant(ITelegramBotClient bot, Message message, UserSession session, string[] data)
|
||||
{
|
||||
// Format: setvariant:productId:variantName (for single item)
|
||||
var productId = Guid.Parse(data[1]);
|
||||
// Use mapper to decode short IDs back to GUIDs
|
||||
var (_, productId, _, _) = _mapper.ParseCallback(string.Join(":", data.Take(2)));
|
||||
var variantName = data[2];
|
||||
|
||||
var product = await _shopService.GetProductAsync(productId);
|
||||
if (!productId.HasValue)
|
||||
{
|
||||
_logger.LogError("Invalid callback data for setvariant: {Data}", string.Join(":", data));
|
||||
return;
|
||||
}
|
||||
|
||||
var product = await _shopService.GetProductAsync(productId.Value);
|
||||
if (product == null) return;
|
||||
|
||||
// For single item, replace selection
|
||||
@ -1325,12 +1337,17 @@ namespace TeleBot.Handlers
|
||||
private async Task HandleAddVariant(ITelegramBotClient bot, Message message, UserSession session, string[] data)
|
||||
{
|
||||
// Format: addvariant:productId:quantity:variantName:multiBuyId (for multi-buy)
|
||||
var productId = Guid.Parse(data[1]);
|
||||
var quantity = int.Parse(data[2]);
|
||||
// Use mapper to decode short IDs back to GUIDs
|
||||
var (_, productId, quantity, multiBuyId) = _mapper.ParseCallback(string.Join(":", data.Take(4)));
|
||||
var variantName = data[3];
|
||||
var multiBuyId = data.Length > 4 && data[4] != "null" ? data[4] : null;
|
||||
|
||||
var product = await _shopService.GetProductAsync(productId);
|
||||
if (!productId.HasValue || !quantity.HasValue)
|
||||
{
|
||||
_logger.LogError("Invalid callback data for addvariant: {Data}", string.Join(":", data));
|
||||
return;
|
||||
}
|
||||
|
||||
var product = await _shopService.GetProductAsync(productId.Value);
|
||||
if (product == null) return;
|
||||
|
||||
// Get current selections
|
||||
@ -1339,7 +1356,7 @@ namespace TeleBot.Handlers
|
||||
: new List<string>();
|
||||
|
||||
// Add variant if not at quantity limit
|
||||
if (selectedVariants.Count < quantity)
|
||||
if (selectedVariants.Count < quantity.Value)
|
||||
{
|
||||
selectedVariants.Add(variantName);
|
||||
session.TempData["selected_variants"] = selectedVariants;
|
||||
@ -1348,34 +1365,39 @@ namespace TeleBot.Handlers
|
||||
await bot.EditMessageReplyMarkupAsync(
|
||||
message.Chat.Id,
|
||||
message.MessageId,
|
||||
replyMarkup: MenuBuilder.VariantSelectionMenu(product, quantity, multiBuyId, selectedVariants)
|
||||
replyMarkup: MenuBuilder.VariantSelectionMenu(product, quantity.Value, multiBuyId?.ToString(), selectedVariants)
|
||||
);
|
||||
}
|
||||
|
||||
private async Task HandleConfirmVariant(ITelegramBotClient bot, CallbackQuery callbackQuery, UserSession session, string[] data)
|
||||
{
|
||||
// Format: confirmvar:productId:quantity:multiBuyId:variantList
|
||||
var productId = Guid.Parse(data[1]);
|
||||
var quantity = int.Parse(data[2]);
|
||||
var multiBuyId = data[3] != "null" ? Guid.Parse(data[3]) : (Guid?)null;
|
||||
// Use mapper to decode short IDs back to GUIDs
|
||||
var (_, productId, quantity, multiBuyId) = _mapper.ParseCallback(string.Join(":", data.Take(4)));
|
||||
var variantString = data[4];
|
||||
var selectedVariants = variantString.Split(',').ToList();
|
||||
|
||||
var product = await _shopService.GetProductAsync(productId);
|
||||
if (!productId.HasValue || !quantity.HasValue)
|
||||
{
|
||||
_logger.LogError("Invalid callback data for confirmvar: {Data}", string.Join(":", data));
|
||||
return;
|
||||
}
|
||||
|
||||
var product = await _shopService.GetProductAsync(productId.Value);
|
||||
if (product == null) return;
|
||||
|
||||
// Add to cart with selected variants
|
||||
var cartItem = session.Cart.AddItem(product, quantity, multiBuyId, variantId: null, selectedVariants);
|
||||
var cartItem = session.Cart.AddItem(product, quantity.Value, multiBuyId, variantId: null, selectedVariants);
|
||||
|
||||
// Show success message
|
||||
await bot.AnswerCallbackQueryAsync(
|
||||
callbackQuery.Id,
|
||||
$"✅ Added {quantity}x {product.Name} with {string.Join(", ", selectedVariants)} to cart!",
|
||||
$"✅ Added {quantity.Value}x {product.Name} with {string.Join(", ", selectedVariants)} to cart!",
|
||||
showAlert: true
|
||||
);
|
||||
|
||||
// Return to product view
|
||||
await HandleProductDetail(bot, callbackQuery.Message!, session, productId);
|
||||
await HandleProductDetail(bot, callbackQuery.Message!, session, productId.Value);
|
||||
|
||||
// Clear temp data
|
||||
session.TempData.Remove("selected_variants");
|
||||
|
||||
Loading…
Reference in New Issue
Block a user