"Fix-order-details-for-customers"
This commit is contained in:
@@ -109,11 +109,11 @@ namespace TeleBot.Handlers
|
||||
break;
|
||||
|
||||
case "orders":
|
||||
await HandleViewOrders(bot, callbackQuery.Message, session);
|
||||
await HandleViewOrders(bot, callbackQuery.Message, session, callbackQuery.From);
|
||||
break;
|
||||
|
||||
case "order":
|
||||
await HandleViewOrder(bot, callbackQuery.Message, session, Guid.Parse(data[1]));
|
||||
await HandleViewOrder(bot, callbackQuery.Message, session, Guid.Parse(data[1]), callbackQuery.From);
|
||||
break;
|
||||
|
||||
case "privacy":
|
||||
@@ -480,20 +480,16 @@ namespace TeleBot.Handlers
|
||||
}
|
||||
}
|
||||
|
||||
private async Task HandleViewOrders(ITelegramBotClient bot, Message message, UserSession session)
|
||||
private async Task HandleViewOrders(ITelegramBotClient bot, Message message, UserSession session, User telegramUser)
|
||||
{
|
||||
var identityRef = session.OrderFlow?.IdentityReference;
|
||||
if (string.IsNullOrEmpty(identityRef))
|
||||
{
|
||||
identityRef = _privacyService.GenerateAnonymousReference();
|
||||
if (session.OrderFlow == null)
|
||||
{
|
||||
session.OrderFlow = new OrderFlowData();
|
||||
}
|
||||
session.OrderFlow.IdentityReference = identityRef;
|
||||
}
|
||||
|
||||
var orders = await _shopService.GetOrdersAsync(identityRef);
|
||||
// Use new customer-based order lookup
|
||||
var orders = await _shopService.GetCustomerOrdersAsync(
|
||||
telegramUser.Id,
|
||||
telegramUser.Username ?? "",
|
||||
$"{telegramUser.FirstName} {telegramUser.LastName}".Trim(),
|
||||
telegramUser.FirstName ?? "",
|
||||
telegramUser.LastName ?? ""
|
||||
);
|
||||
|
||||
if (!orders.Any())
|
||||
{
|
||||
@@ -519,9 +515,16 @@ namespace TeleBot.Handlers
|
||||
session.State = SessionState.ViewingOrders;
|
||||
}
|
||||
|
||||
private async Task HandleViewOrder(ITelegramBotClient bot, Message message, UserSession session, Guid orderId)
|
||||
private async Task HandleViewOrder(ITelegramBotClient bot, Message message, UserSession session, Guid orderId, User telegramUser)
|
||||
{
|
||||
var order = await _shopService.GetOrderAsync(orderId);
|
||||
var order = await _shopService.GetCustomerOrderAsync(
|
||||
orderId,
|
||||
telegramUser.Id,
|
||||
telegramUser.Username ?? "",
|
||||
$"{telegramUser.FirstName} {telegramUser.LastName}".Trim(),
|
||||
telegramUser.FirstName ?? "",
|
||||
telegramUser.LastName ?? ""
|
||||
);
|
||||
|
||||
if (order == null)
|
||||
{
|
||||
|
||||
@@ -20,6 +20,7 @@ namespace TeleBot.Services
|
||||
Task<List<Order>> GetOrdersAsync(string identityReference);
|
||||
Task<List<Order>> GetCustomerOrdersAsync(long telegramUserId, string telegramUsername, string displayName, string firstName, string lastName);
|
||||
Task<Order?> GetOrderAsync(Guid orderId);
|
||||
Task<Order?> GetCustomerOrderAsync(Guid orderId, long telegramUserId, string telegramUsername, string displayName, string firstName, string lastName);
|
||||
Task<CryptoPayment?> CreatePaymentAsync(Guid orderId, string currency);
|
||||
Task<List<CustomerMessage>?> GetPendingMessagesAsync();
|
||||
Task<bool> MarkMessageAsSentAsync(Guid messageId, string? platformMessageId = null);
|
||||
@@ -298,6 +299,47 @@ namespace TeleBot.Services
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<Order?> GetCustomerOrderAsync(Guid orderId, long telegramUserId, string telegramUsername, string displayName, string firstName, string lastName)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!await AuthenticateAsync())
|
||||
return null;
|
||||
|
||||
// Get or create the customer to get customer ID
|
||||
var customer = await _client.Customers.GetOrCreateCustomerAsync(new CreateCustomerRequest
|
||||
{
|
||||
TelegramUserId = telegramUserId,
|
||||
TelegramUsername = telegramUsername,
|
||||
TelegramDisplayName = displayName,
|
||||
TelegramFirstName = firstName,
|
||||
TelegramLastName = lastName,
|
||||
AllowOrderUpdates = true,
|
||||
AllowMarketing = false
|
||||
});
|
||||
|
||||
if (!customer.IsSuccess || customer.Data == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
// Get the specific order using customer validation
|
||||
var result = await _client.Orders.GetOrderByCustomerIdAsync(customer.Data.Id, orderId);
|
||||
|
||||
if (result.IsSuccess && result.Data != null)
|
||||
{
|
||||
return result.Data;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Error fetching customer order {OrderId}", orderId);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<CryptoPayment?> CreatePaymentAsync(Guid orderId, string currency)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user