Stable payment and order process
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
using LiteCharms.Features;
|
||||
using LiteCharms.Features.Hasher;
|
||||
using LiteCharms.Features.MidrandBooks.Customers;
|
||||
using LiteCharms.Features.MidrandBooks.Orders;
|
||||
using LiteCharms.Features.MidrandBooks.Payments;
|
||||
using LiteCharms.Features.MidrandBooks.Payments.Models;
|
||||
|
||||
namespace MidrandBookshop.Components.Pages;
|
||||
|
||||
public partial class PaymentFailed
|
||||
{
|
||||
[Inject] public CartService CartService { get; set; } = default!;
|
||||
[Inject] public OrderService OrderService { get; set; } = default!;
|
||||
[Inject] private CustomerService CustomerService { get; set; } = default!;
|
||||
[Inject] public PaymentService PaymentService { get; set; } = default!;
|
||||
[Inject] public HashService HashService { get; set; } = default!;
|
||||
[Inject] private AuthenticationStateProvider AuthStateProvider { get; set; } = default!;
|
||||
[Inject] private CancellationToken CancellationToken { get; set; } = default!;
|
||||
|
||||
private ClaimsPrincipal? User { get; set; }
|
||||
|
||||
[Parameter]
|
||||
[SupplyParameterFromQuery(Name = "reference")]
|
||||
public string? PaymentReference { get; set; }
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
var authState = await AuthStateProvider.GetAuthenticationStateAsync();
|
||||
User = authState!.User;
|
||||
|
||||
if (User?.Identity?.IsAuthenticated == false) Navigation.NavigateTo("/login");
|
||||
|
||||
if (string.IsNullOrWhiteSpace(PaymentReference)) return;
|
||||
|
||||
long orderId = HashService.DecodeLongIdHash(PaymentReference).Value;
|
||||
|
||||
var customerEmail = User!.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Email)!.Value!;
|
||||
|
||||
var customerFetch = await CustomerService.GetCustomerAsync(customerEmail, CancellationToken);
|
||||
|
||||
if (customerFetch.IsFailed) return;
|
||||
|
||||
long customerId = customerFetch.Value.Id;
|
||||
|
||||
var orderUpdateResult = await OrderService.UpdateOrderStatusAsync(orderId, OrderStatus.Cancelled, CancellationToken);
|
||||
|
||||
if (orderUpdateResult.IsFailed) return;
|
||||
|
||||
var paymentIdFetch = await PaymentService.GetOrderPaymentAsync(orderId, CancellationToken);
|
||||
|
||||
if (paymentIdFetch.IsFailed) return;
|
||||
|
||||
await PaymentService.WriteLedgerEntryAsync(new CreateLedgerEntry
|
||||
{
|
||||
CustomerId = customerId,
|
||||
OrderId = orderId,
|
||||
PaymentGatewayId = 1,
|
||||
PaymentGatewayReference = PaymentReference,
|
||||
PaymentId = paymentIdFetch.Value.Id,
|
||||
Status = LedgerStatuses.Cancelled
|
||||
|
||||
}, CancellationToken);
|
||||
|
||||
CartService.Clear();
|
||||
CartService.ShoppingCart.OrderId = null;
|
||||
await CartService.SaveCartToStorageAsync();
|
||||
CartService.NotifyStateChanged();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user