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
+
+
+
+
+ # |
+ Dessert |
+ Flavor |
+ Toppings |
+ Price |
+
+
+
+ @{
+ var i = 1;
+ }
+ @foreach (var order in Cart.Orders!)
+ {
+
+ @i |
+ @order.Dessert!.Name |
+ @order.Flavor!.Name |
+ |
+ @order.GetDessertPrice().ToString("C") |
+
+ i += 1;
+ @if (order.Toppings!.Any())
+ {
+ @foreach (var topping in order.Toppings!)
+ {
+
+ |
+ |
+ |
+ @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
Logout
-
+