73 lines
2.6 KiB
C#
73 lines
2.6 KiB
C#
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");
|
|
}
|
|
|
|
protected override async Task OnAfterRenderAsync(bool firstRender)
|
|
{
|
|
if (!firstRender) 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();
|
|
}
|
|
}
|