"Fix-Use-short-IDs-for-product-buttons-and-simplify-to-Buy-button"

This commit is contained in:
sysadmin 2025-10-03 15:48:54 +01:00
parent 694ce15549
commit 8fb8c56d9b
3 changed files with 18 additions and 11 deletions

View File

@ -97,7 +97,11 @@ namespace TeleBot.Handlers
break;
case "product":
await HandleProductDetail(bot, callbackQuery.Message, session, Guid.Parse(data[1]));
{
var (_, productId, _, _) = _mapper.ParseCallback(callbackQuery.Data);
if (productId.HasValue)
await HandleProductDetail(bot, callbackQuery.Message, session, productId.Value);
}
break;
case "qty":

View File

@ -30,20 +30,23 @@ namespace TeleBot.Services
private readonly ILogger<ProductCarouselService> _logger;
private readonly HttpClient _httpClient;
private readonly MenuBuilder _menuBuilder;
private readonly CallbackDataMapper _mapper;
private readonly string _imageCachePath;
public ProductCarouselService(
IConfiguration configuration,
ILogger<ProductCarouselService> logger,
HttpClient httpClient,
MenuBuilder menuBuilder)
MenuBuilder menuBuilder,
CallbackDataMapper mapper)
{
_configuration = configuration;
_logger = logger;
_menuBuilder = menuBuilder;
_mapper = mapper;
_httpClient = httpClient;
_imageCachePath = Path.Combine(Environment.CurrentDirectory, "image_cache");
// Ensure cache directory exists
Directory.CreateDirectory(_imageCachePath);
}
@ -97,13 +100,13 @@ namespace TeleBot.Services
);
}
// Add button for this product
productButtons.Add(new[]
{
// Add Buy button for this product (simplified - just "Buy" since product info is in caption)
productButtons.Add(new[]
{
InlineKeyboardButton.WithCallbackData(
$"🛒 {product.Name} - ${product.Price:F2}",
$"product:{product.Id}"
)
$"🛒 Buy {product.Name}",
_mapper.BuildCallback("product", product.Id)
)
});
}

View File

@ -23,7 +23,7 @@ namespace TeleBot
var mapper = new TeleBot.Services.CallbackDataMapper();
var menuBuilder = new TeleBot.UI.MenuBuilder(mapper);
var carouselService = new ProductCarouselService(config, logger, httpClient, menuBuilder);
var carouselService = new ProductCarouselService(config, logger, httpClient, menuBuilder, mapper);
// Test image URL validation
var validUrls = new[]
@ -48,7 +48,7 @@ namespace TeleBot
var mapper = new TeleBot.Services.CallbackDataMapper();
var menuBuilder = new TeleBot.UI.MenuBuilder(mapper);
var carouselService = new ProductCarouselService(config, logger, httpClient, menuBuilder);
var carouselService = new ProductCarouselService(config, logger, httpClient, menuBuilder, mapper);
// Create a test product with image
var testProduct = new Product