diff --git a/MyFirstBlazor/BlazingPizza/Controllers/OrdersController.cs b/MyFirstBlazor/BlazingPizza/Controllers/OrdersController.cs index 077bbd2..f4ca599 100644 --- a/MyFirstBlazor/BlazingPizza/Controllers/OrdersController.cs +++ b/MyFirstBlazor/BlazingPizza/Controllers/OrdersController.cs @@ -27,6 +27,21 @@ namespace BlazingPizza.Controllers return orders.Select(o => OrderWithStatus.FromOrder(o)).ToList(); } + [HttpGet("{orderId}")] + public async Task> GetOrderWithStatus(int orderId) + { + var order = await _db.Orders + .Where(o => o.OrderId == orderId) + .Include(o => o.Pizzas).ThenInclude(p => p.Special) + .Include(o => o.Pizzas).ThenInclude(p => p.Toppings).ThenInclude(t => t.Topping) + .SingleOrDefaultAsync(); + + if (order == null) + return NotFound(); + + return OrderWithStatus.FromOrder(order); + } + [HttpPost] public async Task> PlaceOrder(Order order) { diff --git a/MyFirstBlazor/BlazingPizza/Pages/Checkout.razor b/MyFirstBlazor/BlazingPizza/Pages/Checkout.razor index 164480d..3b67888 100644 --- a/MyFirstBlazor/BlazingPizza/Pages/Checkout.razor +++ b/MyFirstBlazor/BlazingPizza/Pages/Checkout.razor @@ -60,6 +60,6 @@ var newOrderId = await response.Content.ReadFromJsonAsync(); OrderState.ResetOrder(); - NavigationManager.NavigateTo("/"); + NavigationManager.NavigateTo($"myorders/{newOrderId}"); } } diff --git a/MyFirstBlazor/BlazingPizza/Pages/MyOrders.razor b/MyFirstBlazor/BlazingPizza/Pages/MyOrders.razor index da619f8..6fd8e27 100644 --- a/MyFirstBlazor/BlazingPizza/Pages/MyOrders.razor +++ b/MyFirstBlazor/BlazingPizza/Pages/MyOrders.razor @@ -11,7 +11,7 @@
Get Pizza
- +
My orders
@@ -46,7 +46,7 @@ @if (item.StatusText != "Delivered") { diff --git a/MyFirstBlazor/BlazingPizza/Pages/OrderDetail.razor b/MyFirstBlazor/BlazingPizza/Pages/OrderDetail.razor new file mode 100644 index 0000000..3e56224 --- /dev/null +++ b/MyFirstBlazor/BlazingPizza/Pages/OrderDetail.razor @@ -0,0 +1,86 @@ +@page "/myorders/{orderId:int}" +@inject HttpClient HttpClient +@inject NavigationManager NavigationManager + +
+ + + + +
Get Pizza
+
+ + +
My orders
+
+
+ +
+ @if (_invalidOrder) + { +

Order not found

+

We're sorry but this order no longer exists.

+ } + else if (_orderWithStatus == null) + { +
+
+

+ Loading... +

+

+ ... +

+
+
+ } + else + { +
+
+

+ Order placed @_orderWithStatus.Order.CreatedTime.ToLongDateString() +

+

+ Status: @_orderWithStatus.StatusText +

+
+
+
+ @foreach (var pizza in _orderWithStatus.Order.Pizzas) + { +

+ + @(pizza.Size)' + @pizza.Special.Name + (£@pizza.GetFormattedTotalPrice()) + +

+ } +
+
+
+ } +
+ +@code { + [Parameter] public int OrderId { get; set; } + + OrderWithStatus _orderWithStatus; + bool _invalidOrder = false; + + protected override async Task OnParametersSetAsync() + { + try + { + _orderWithStatus = await HttpClient.GetFromJsonAsync($"{NavigationManager.BaseUri}orders/{OrderId}"); + } + catch (Exception ex) + { + _invalidOrder = true; + Console.Error.WriteLine(ex); + } + } +} diff --git a/MyFirstBlazor/BlazingPizza/pizza.db-wal b/MyFirstBlazor/BlazingPizza/pizza.db-wal index 6f5d03e..4c3b1f7 100644 Binary files a/MyFirstBlazor/BlazingPizza/pizza.db-wal and b/MyFirstBlazor/BlazingPizza/pizza.db-wal differ