Update order system with new gRPC services and wallet integration

This commit is contained in:
masoodafar-web
2025-11-28 05:12:55 +03:30
parent 973beb9e2f
commit d8e1fe77b3
20 changed files with 502 additions and 209 deletions
@@ -1,4 +1,5 @@
using FrontOffice.BFF.UserAddress.Protobuf.Protos.UserAddress;
using FrontOffice.BFF.UserOrder.Protobuf.Protos.UserOrder;
using FrontOffice.Main.Utilities;
using Microsoft.AspNetCore.Components;
using MudBlazor;
@@ -10,11 +11,13 @@ public partial class CheckoutSummary : ComponentBase
[Inject] private CartService Cart { get; set; } = default!;
[Inject] private OrderService OrderService { get; set; } = default!;
[Inject] private UserAddressContract.UserAddressContractClient UserAddressContract { get; set; } = default!;
[Inject] private UserOrderContract.UserOrderContractClient UserOrderContract { get; set; } = default!;
// Snackbar and Navigation are injected via _Imports.razor
private List<GetAllUserAddressByFilterResponseModel> _addresses = new();
private GetAllUserAddressByFilterResponseModel? _selectedAddress;
private bool _loadingAddresses;
private long walletBalance;
private PaymentMethod _payment = PaymentMethod.Wallet;
@@ -23,6 +26,13 @@ public partial class CheckoutSummary : ComponentBase
protected override async Task OnInitializedAsync()
{
await LoadAddresses();
await LoadWalletBalance();
}
private async Task LoadWalletBalance()
{
var walletResult = await WalletService.GetBalancesAsync();
walletBalance = walletResult.CreditBalance + walletResult.NetworkBalance;
}
private async Task LoadAddresses()
@@ -61,21 +71,23 @@ public partial class CheckoutSummary : ComponentBase
return;
}
// Simulate wallet payment success and create local order
var order = new Order
try
{
Status = OrderStatus.Paid,
PaymentMethod = _payment,
AddressId = _selectedAddress.Id,
AddressSummary = _selectedAddress.Address,
Items = Cart.Items.Select(i => new OrderItem(i.ProductId, i.Title, i.ImageUrl, i.UnitPrice, i.Quantity)).ToList()
};
var request = new SubmitShopBuyOrderRequest
{
TotalAmount = Cart.Total
};
var id = await OrderService.CreateOrderAsync(order);
await Cart.Clear();
Snackbar.Add("سفارش با موفقیت ثبت شد.", Severity.Success);
Navigation.NavigateTo($"{RouteConstants.Store.OrderDetail}{id}");
var response = await UserOrderContract.SubmitShopBuyOrderAsync(request);
await Cart.Clear();
Snackbar.Add("سفارش با موفقیت ثبت شد.", Severity.Success);
Navigation.NavigateTo($"{RouteConstants.Store.OrderDetail}{response.Id}");
}
catch (Exception ex)
{
Snackbar.Add($"خطا در ثبت سفارش: {ex.Message}", Severity.Error);
}
}
private static string FormatPrice(long price) => string.Format("{0:N0} تومان", price);
}
}