Fix: VariantSelectionMenu now uses CallbackDataMapper for all callback data to prevent GUID parsing errors

This commit is contained in:
SysAdmin 2025-10-05 23:27:12 +01:00
parent 0801fb004c
commit f1d8bfc317

View File

@ -344,15 +344,15 @@ namespace TeleBot.UI
if (product.Variants?.Any(v => v.IsActive) != true) if (product.Variants?.Any(v => v.IsActive) != true)
{ {
// No variants, just add to cart // No variants, just add to cart - use mapper for short IDs
var callbackData = multiBuyId != null var callbackData = multiBuyId != null
? $"add:{product.Id}:{quantity}:{multiBuyId}" ? _mapper.BuildCallback("add", product.Id, quantity, Guid.Parse(multiBuyId))
: $"add:{product.Id}:{quantity}"; : _mapper.BuildCallback("add", product.Id, quantity);
buttons.Add(new[] { buttons.Add(new[] {
InlineKeyboardButton.WithCallbackData($"🛒 Add to Cart", callbackData) InlineKeyboardButton.WithCallbackData($"🛒 Add to Cart", callbackData)
}); });
buttons.Add(new[] { InlineKeyboardButton.WithCallbackData("⬅️ Back", $"product:{product.Id}") }); buttons.Add(new[] { InlineKeyboardButton.WithCallbackData("⬅️ Back", _mapper.BuildCallback("product", product.Id)) });
return new InlineKeyboardMarkup(buttons); return new InlineKeyboardMarkup(buttons);
} }
@ -435,9 +435,12 @@ namespace TeleBot.UI
? $"{variant.Name} ({count}){variantInfo}" ? $"{variant.Name} ({count}){variantInfo}"
: $"{variant.Name}{variantInfo}"; : $"{variant.Name}{variantInfo}";
// Build callback with mapper for short IDs
var callbackData = $"addvariant:{_mapper.GetShortId(product.Id, "p")}:{quantity}:{variant.Name}:{multiBuyId ?? "null"}";
variantButtons.Add(InlineKeyboardButton.WithCallbackData( variantButtons.Add(InlineKeyboardButton.WithCallbackData(
buttonText, buttonText,
$"addvariant:{product.Id}:{quantity}:{variant.Name}:{multiBuyId ?? "null"}" callbackData
)); ));
} }
else else
@ -448,9 +451,12 @@ namespace TeleBot.UI
? $"✅ {variant.Name}{variantInfo}" ? $"✅ {variant.Name}{variantInfo}"
: $"{variant.Name}{variantInfo}"; : $"{variant.Name}{variantInfo}";
// Build callback with mapper for short IDs
var callbackData = $"setvariant:{_mapper.GetShortId(product.Id, "p")}:{variant.Name}";
variantButtons.Add(InlineKeyboardButton.WithCallbackData( variantButtons.Add(InlineKeyboardButton.WithCallbackData(
buttonText, buttonText,
$"setvariant:{product.Id}:{variant.Name}" callbackData
)); ));
} }
} }
@ -468,9 +474,10 @@ namespace TeleBot.UI
if (canConfirm) if (canConfirm)
{ {
var variantString = string.Join(",", selectedVariants); var variantString = string.Join(",", selectedVariants);
var shortProductId = _mapper.GetShortId(product.Id, "p");
var callbackData = multiBuyId != null var callbackData = multiBuyId != null
? $"confirmvar:{product.Id}:{quantity}:{multiBuyId}:{variantString}" ? $"confirmvar:{shortProductId}:{quantity}:{multiBuyId}:{variantString}"
: $"confirmvar:{product.Id}:{quantity}:null:{variantString}"; : $"confirmvar:{shortProductId}:{quantity}:null:{variantString}";
buttons.Add(new[] { buttons.Add(new[] {
InlineKeyboardButton.WithCallbackData( InlineKeyboardButton.WithCallbackData(
@ -483,15 +490,16 @@ namespace TeleBot.UI
// Clear selection button for multi-buy // Clear selection button for multi-buy
if (quantity > 1 && selectedVariants.Any()) if (quantity > 1 && selectedVariants.Any())
{ {
var shortProductId = _mapper.GetShortId(product.Id, "p");
buttons.Add(new[] { buttons.Add(new[] {
InlineKeyboardButton.WithCallbackData( InlineKeyboardButton.WithCallbackData(
"🔄 Clear Selections", "🔄 Clear Selections",
$"selectvar:{product.Id}:{quantity}:{multiBuyId ?? "null"}" $"selectvar:{shortProductId}:{quantity}:{multiBuyId ?? "null"}"
) )
}); });
} }
buttons.Add(new[] { InlineKeyboardButton.WithCallbackData("⬅️ Back", $"product:{product.Id}") }); buttons.Add(new[] { InlineKeyboardButton.WithCallbackData("⬅️ Back", _mapper.BuildCallback("product", product.Id)) });
return new InlineKeyboardMarkup(buttons); return new InlineKeyboardMarkup(buttons);
} }