diff --git a/Models/Order.cs b/Models/Order.cs index c230c14..c862f5c 100644 --- a/Models/Order.cs +++ b/Models/Order.cs @@ -38,6 +38,11 @@ public decimal GetTotalPrice() { return GetToppingsPrice() + (decimal)Dessert!.Price * Size / DefaultSize; } + + public decimal GetDessertPrice() + { + return (decimal)Dessert!.Price * Size / DefaultSize; + } } public class OrderResponse diff --git a/Pages/Checkout.razor b/Pages/Checkout.razor new file mode 100644 index 0000000..32c6976 --- /dev/null +++ b/Pages/Checkout.razor @@ -0,0 +1,137 @@ +@page "/Checkout" +@using kuro_desserts.Services +@using kuro_desserts.Models +@using System.Text.Json +@using System.Net.Http.Headers +@inject CartService CartService +@inject HttpClient HttpClient +@inject NavigationManager NavigationManager +@inject IJSRuntime JsRuntime; + +Cart + +@if (Cart.Orders!.Any()) +{ +

Your cart

+
+ + + + + + + + + + + + @{ + var i = 1; + } + @foreach (var order in Cart.Orders!) + { + + + + + + + + i += 1; + @if (order.Toppings!.Any()) + { + @foreach (var topping in order.Toppings!) + { + + + + + + + + } + } + } + + + + + + + + +
#DessertFlavorToppingsPrice
@i@order.Dessert!.Name@order.Flavor!.Name@order.GetDessertPrice().ToString("C")
@topping.Topping!.Name@topping.Topping.Price.ToString("C")
Total@Cart.GetTotalPrice().ToString("C")
+
+ @if (_addresses != null) + { + + + } + else + { + You don't have any address, Click here to add one + } +} +else +{ +

You have nothing in your cart, go to buy something

+} + +@code { + Cart Cart => CartService.Cart; + Address[]? _addresses; + string? _token; + bool _addressSelected; + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + _token = await JsRuntime.InvokeAsync("ReadCookie.ReadCookie", "token"); + HttpClient.DefaultRequestHeaders.Authorization = AuthenticationHeaderValue.Parse(_token); + try + { + _addresses = await HttpClient.GetFromJsonAsync($"{NavigationManager.BaseUri}api/addresses"); + } + catch (JsonException) + { + _addresses = null; + } + StateHasChanged(); + } + } + + void SelectAddress(ChangeEventArgs e) + { + if (e.Value!.ToString() != "") + { + Cart.AddressId = Guid.Parse(e.Value.ToString()!); + _addressSelected = true; + } + else + { + _addressSelected = false; + } + } + + async Task ConfirmCheckout() + { + var toppings = Cart.Orders!.SelectMany(order => order.Toppings!).ToList(); + var checkoutRequest = new CheckoutRequest + { + Cart = new Cart { AddressId = Cart.AddressId }, + Orders = Cart.Orders!, + OrderToppings = toppings + }; + HttpClient.DefaultRequestHeaders.Authorization = AuthenticationHeaderValue.Parse(_token); + await HttpClient.PostAsJsonAsync($"{NavigationManager.BaseUri}api/checkout", checkoutRequest); + NavigationManager.NavigateTo("/orders", forceLoad: true); + } + +} \ No newline at end of file diff --git a/Shared/NavMenu.razor b/Shared/NavMenu.razor index d232543..ca3da55 100644 --- a/Shared/NavMenu.razor +++ b/Shared/NavMenu.razor @@ -17,7 +17,7 @@ My Orders Profile - +