Separate OrderViewModel from OrderDetailsViewModel (#904)

* Separate OrderViewModel from OrderDetailsViewModel

* Update packages
This commit is contained in:
Steve Smith
2023-05-23 14:55:24 -04:00
committed by GitHub
parent 896d75d55f
commit e7d71ea572
10 changed files with 44 additions and 37 deletions

View File

@@ -1,7 +1,6 @@
<Project> <Project>
<PropertyGroup> <PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally> <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<TargetFramework>net7.0</TargetFramework> <TargetFramework>net7.0</TargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@@ -15,25 +14,25 @@
<PackageVersion Include="BlazorInputFile" Version="0.2.0" /> <PackageVersion Include="BlazorInputFile" Version="0.2.0" />
<PackageVersion Include="Blazored.LocalStorage" Version="4.3.0" /> <PackageVersion Include="Blazored.LocalStorage" Version="4.3.0" />
<PackageVersion Include="BuildBundlerMinifier" Version="3.2.449" PrivateAssets="All" /> <PackageVersion Include="BuildBundlerMinifier" Version="3.2.449" PrivateAssets="All" />
<PackageVersion Include="FluentValidation" Version="11.5.1" /> <PackageVersion Include="FluentValidation" Version="11.5.2" />
<PackageVersion Include="MediatR" Version="12.0.1" /> <PackageVersion Include="MediatR" Version="12.0.1" />
<PackageVersion Include="Microsoft.AspNetCore.Components.Authorization" Version="7.0.4" /> <PackageVersion Include="Microsoft.AspNetCore.Components.Authorization" Version="7.0.5" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="7.0.4" /> <PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="7.0.5" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="7.0.4" /> <PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="7.0.5" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="7.0.4" PrivateAssets="all" /> <PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="7.0.5" PrivateAssets="all" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="7.0.4" /> <PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="7.0.5" />
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="7.0.4" /> <PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="7.0.5" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.4" /> <PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.5" />
<PackageVersion Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="7.0.4" /> <PackageVersion Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="7.0.5" />
<PackageVersion Include="Microsoft.AspNetCore.Identity.UI" Version="7.0.4" /> <PackageVersion Include="Microsoft.AspNetCore.Identity.UI" Version="7.0.5" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" /> <PackageVersion Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
<PackageVersion Include="Microsoft.Extensions.Identity.Core" Version="7.0.4" /> <PackageVersion Include="Microsoft.Extensions.Identity.Core" Version="7.0.5" />
<PackageVersion Include="Microsoft.Extensions.Logging.Configuration" Version="7.0.0" /> <PackageVersion Include="Microsoft.Extensions.Logging.Configuration" Version="7.0.0" />
<PackageVersion Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="7.0.5" /> <PackageVersion Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="7.0.6" />
<PackageVersion Include="Microsoft.Web.LibraryManager.Build" Version="2.1.175" /> <PackageVersion Include="Microsoft.Web.LibraryManager.Build" Version="2.1.175" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.5" /> <PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.5" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.4" /> <PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.5" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.4"> <PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.5">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageVersion> </PackageVersion>
@@ -42,13 +41,13 @@
<PackageVersion Include="System.Net.Http.Json" Version="7.0.1" /> <PackageVersion Include="System.Net.Http.Json" Version="7.0.1" />
<PackageVersion Include="System.Security.Claims" Version="4.3.0" /> <PackageVersion Include="System.Security.Claims" Version="4.3.0" />
<PackageVersion Include="System.Text.Json" Version="7.0.2" /> <PackageVersion Include="System.Text.Json" Version="7.0.2" />
<PackageVersion Include="System.IdentityModel.Tokens.Jwt" Version="6.27.0" /> <PackageVersion Include="System.IdentityModel.Tokens.Jwt" Version="6.30.1" />
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.5.0" /> <PackageVersion Include="Swashbuckle.AspNetCore" Version="6.5.0" />
<PackageVersion Include="Swashbuckle.AspNetCore.SwaggerUI" Version="6.5.0" /> <PackageVersion Include="Swashbuckle.AspNetCore.SwaggerUI" Version="6.5.0" />
<PackageVersion Include="Swashbuckle.AspNetCore.Annotations" Version="6.5.0" /> <PackageVersion Include="Swashbuckle.AspNetCore.Annotations" Version="6.5.0" />
<!-- Test --> <!-- Test -->
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="7.0.4" /> <PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="7.0.5" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.5.0" /> <PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.6.0" />
<PackageVersion Include="xunit" Version="2.4.2" /> <PackageVersion Include="xunit" Version="2.4.2" />
<PackageVersion Include="xunit.runner.visualstudio" Version="2.4.5"> <PackageVersion Include="xunit.runner.visualstudio" Version="2.4.5">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
@@ -61,6 +60,6 @@
<PackageVersion Include="Moq" Version="4.18.4" /> <PackageVersion Include="Moq" Version="4.18.4" />
<PackageVersion Include="MSTest.TestAdapter" Version="3.0.2" /> <PackageVersion Include="MSTest.TestAdapter" Version="3.0.2" />
<PackageVersion Include="MSTest.TestFramework" Version="3.0.2" /> <PackageVersion Include="MSTest.TestFramework" Version="3.0.2" />
<PackageVersion Include="coverlet.collector" Version="3.2.0" /> <PackageVersion Include="coverlet.collector" Version="6.0.0" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -0,0 +1,13 @@
using Ardalis.Specification;
using Microsoft.eShopWeb.ApplicationCore.Entities.OrderAggregate;
namespace Microsoft.eShopWeb.ApplicationCore.Specifications;
public class CustomerOrdersSpecification : Specification<Order>
{
public CustomerOrdersSpecification(string buyerId)
{
Query.Where(o => o.BuyerId == buyerId)
.Include(o => o.OrderItems);
}
}

View File

@@ -1,5 +1,4 @@
using System.Collections.Generic; using MediatR;
using MediatR;
using Microsoft.eShopWeb.Web.ViewModels; using Microsoft.eShopWeb.Web.ViewModels;
namespace Microsoft.eShopWeb.Web.Features.MyOrders; namespace Microsoft.eShopWeb.Web.Features.MyOrders;

View File

@@ -18,20 +18,12 @@ public class GetMyOrdersHandler : IRequestHandler<GetMyOrders, IEnumerable<Order
public async Task<IEnumerable<OrderViewModel>> Handle(GetMyOrders request, public async Task<IEnumerable<OrderViewModel>> Handle(GetMyOrders request,
CancellationToken cancellationToken) CancellationToken cancellationToken)
{ {
var specification = new CustomerOrdersWithItemsSpecification(request.UserName); var specification = new CustomerOrdersSpecification(request.UserName);
var orders = await _orderRepository.ListAsync(specification, cancellationToken); var orders = await _orderRepository.ListAsync(specification, cancellationToken);
return orders.Select(o => new OrderViewModel return orders.Select(o => new OrderViewModel
{ {
OrderDate = o.OrderDate, OrderDate = o.OrderDate,
OrderItems = o.OrderItems.Select(oi => new OrderItemViewModel()
{
PictureUrl = oi.ItemOrdered.PictureUri,
ProductId = oi.ItemOrdered.CatalogItemId,
ProductName = oi.ItemOrdered.ProductName,
UnitPrice = oi.UnitPrice,
Units = oi.Units
}).ToList(),
OrderNumber = o.Id, OrderNumber = o.Id,
ShippingAddress = o.ShipToAddress, ShippingAddress = o.ShipToAddress,
Total = o.Total() Total = o.Total()

View File

@@ -3,7 +3,7 @@ using Microsoft.eShopWeb.Web.ViewModels;
namespace Microsoft.eShopWeb.Web.Features.OrderDetails; namespace Microsoft.eShopWeb.Web.Features.OrderDetails;
public class GetOrderDetails : IRequest<OrderViewModel> public class GetOrderDetails : IRequest<OrderDetailViewModel>
{ {
public string UserName { get; set; } public string UserName { get; set; }
public int OrderId { get; set; } public int OrderId { get; set; }

View File

@@ -6,7 +6,7 @@ using Microsoft.eShopWeb.Web.ViewModels;
namespace Microsoft.eShopWeb.Web.Features.OrderDetails; namespace Microsoft.eShopWeb.Web.Features.OrderDetails;
public class GetOrderDetailsHandler : IRequestHandler<GetOrderDetails, OrderViewModel?> public class GetOrderDetailsHandler : IRequestHandler<GetOrderDetails, OrderDetailViewModel?>
{ {
private readonly IReadRepository<Order> _orderRepository; private readonly IReadRepository<Order> _orderRepository;
@@ -15,7 +15,7 @@ public class GetOrderDetailsHandler : IRequestHandler<GetOrderDetails, OrderView
_orderRepository = orderRepository; _orderRepository = orderRepository;
} }
public async Task<OrderViewModel?> Handle(GetOrderDetails request, public async Task<OrderDetailViewModel?> Handle(GetOrderDetails request,
CancellationToken cancellationToken) CancellationToken cancellationToken)
{ {
var spec = new OrderWithItemsByIdSpec(request.OrderId); var spec = new OrderWithItemsByIdSpec(request.OrderId);
@@ -26,7 +26,7 @@ public class GetOrderDetailsHandler : IRequestHandler<GetOrderDetails, OrderView
return null; return null;
} }
return new OrderViewModel return new OrderDetailViewModel
{ {
OrderDate = order.OrderDate, OrderDate = order.OrderDate,
OrderItems = order.OrderItems.Select(oi => new OrderItemViewModel OrderItems = order.OrderItems.Select(oi => new OrderItemViewModel

View File

@@ -0,0 +1,6 @@
namespace Microsoft.eShopWeb.Web.ViewModels;
public class OrderDetailViewModel : OrderViewModel
{
public List<OrderItemViewModel> OrderItems { get; set; } = new();
}

View File

@@ -11,5 +11,4 @@ public class OrderViewModel
public decimal Total { get; set; } public decimal Total { get; set; }
public string Status => DEFAULT_STATUS; public string Status => DEFAULT_STATUS;
public Address? ShippingAddress { get; set; } public Address? ShippingAddress { get; set; }
public List<OrderItemViewModel> OrderItems { get; set; } = new();
} }

View File

@@ -1,4 +1,4 @@
@model OrderViewModel @model OrderDetailViewModel
@{ @{
ViewData["Title"] = "My Order History"; ViewData["Title"] = "My Order History";
} }

View File

@@ -9,7 +9,6 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc" />
<PackageReference Include="Microsoft.NET.Test.Sdk" /> <PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="Moq" /> <PackageReference Include="Moq" />
<PackageReference Include="xunit" /> <PackageReference Include="xunit" />