"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; break;
case "product": 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; break;
case "qty": case "qty":

View File

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

View File

@ -23,7 +23,7 @@ namespace TeleBot
var mapper = new TeleBot.Services.CallbackDataMapper(); var mapper = new TeleBot.Services.CallbackDataMapper();
var menuBuilder = new TeleBot.UI.MenuBuilder(mapper); 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 // Test image URL validation
var validUrls = new[] var validUrls = new[]
@ -48,7 +48,7 @@ namespace TeleBot
var mapper = new TeleBot.Services.CallbackDataMapper(); var mapper = new TeleBot.Services.CallbackDataMapper();
var menuBuilder = new TeleBot.UI.MenuBuilder(mapper); 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 // Create a test product with image
var testProduct = new Product var testProduct = new Product