Update Specification and other packages to latest version (#582)
* Updating repositories and specification version Need to fix broken tests * removing test that would just be testing mocked result now * Refactored from IAsyncRepository and removed it. Tests pass. * Update packages
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Ardalis.GuardClauses" Version="3.0.1" />
|
||||
<PackageReference Include="Ardalis.Specification" Version="4.1.0" />
|
||||
<PackageReference Include="Ardalis.Specification" Version="5.2.0" />
|
||||
<PackageReference Include="MediatR" Version="9.0.0" />
|
||||
<PackageReference Include="System.Security.Claims" Version="4.3.0" />
|
||||
<PackageReference Include="System.Text.Json" Version="5.0.0" />
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
using Ardalis.Specification;
|
||||
using Microsoft.eShopWeb.ApplicationCore.Entities;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.eShopWeb.ApplicationCore.Interfaces
|
||||
{
|
||||
public interface IAsyncRepository<T> where T : BaseEntity, IAggregateRoot
|
||||
{
|
||||
Task<T> GetByIdAsync(int id, CancellationToken cancellationToken = default);
|
||||
Task<IReadOnlyList<T>> ListAllAsync(CancellationToken cancellationToken = default);
|
||||
Task<IReadOnlyList<T>> ListAsync(ISpecification<T> spec, CancellationToken cancellationToken = default);
|
||||
Task<T> AddAsync(T entity, CancellationToken cancellationToken = default);
|
||||
Task UpdateAsync(T entity, CancellationToken cancellationToken = default);
|
||||
Task DeleteAsync(T entity, CancellationToken cancellationToken = default);
|
||||
Task<int> CountAsync(ISpecification<T> spec, CancellationToken cancellationToken = default);
|
||||
Task<T> FirstAsync(ISpecification<T> spec, CancellationToken cancellationToken = default);
|
||||
Task<T> FirstOrDefaultAsync(ISpecification<T> spec, CancellationToken cancellationToken = default);
|
||||
}
|
||||
}
|
||||
@@ -4,8 +4,8 @@ using System.Threading.Tasks;
|
||||
namespace Microsoft.eShopWeb.ApplicationCore.Interfaces
|
||||
{
|
||||
|
||||
public interface IOrderRepository : IAsyncRepository<Order>
|
||||
{
|
||||
Task<Order> GetByIdWithItemsAsync(int id);
|
||||
}
|
||||
//public interface IOrderRepository : IAsyncRepository<Order>
|
||||
//{
|
||||
// Task<Order> GetByIdWithItemsAsync(int id);
|
||||
//}
|
||||
}
|
||||
|
||||
8
src/ApplicationCore/Interfaces/IReadRepository.cs
Normal file
8
src/ApplicationCore/Interfaces/IReadRepository.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
using Ardalis.Specification;
|
||||
|
||||
namespace Microsoft.eShopWeb.ApplicationCore.Interfaces
|
||||
{
|
||||
public interface IReadRepository<T> : IReadRepositoryBase<T> where T : class, IAggregateRoot
|
||||
{
|
||||
}
|
||||
}
|
||||
8
src/ApplicationCore/Interfaces/IRepository.cs
Normal file
8
src/ApplicationCore/Interfaces/IRepository.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
using Ardalis.Specification;
|
||||
|
||||
namespace Microsoft.eShopWeb.ApplicationCore.Interfaces
|
||||
{
|
||||
public interface IRepository<T> : IRepositoryBase<T> where T : class, IAggregateRoot
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -9,10 +9,10 @@ namespace Microsoft.eShopWeb.ApplicationCore.Services
|
||||
{
|
||||
public class BasketService : IBasketService
|
||||
{
|
||||
private readonly IAsyncRepository<Basket> _basketRepository;
|
||||
private readonly IRepository<Basket> _basketRepository;
|
||||
private readonly IAppLogger<BasketService> _logger;
|
||||
|
||||
public BasketService(IAsyncRepository<Basket> basketRepository,
|
||||
public BasketService(IRepository<Basket> basketRepository,
|
||||
IAppLogger<BasketService> logger)
|
||||
{
|
||||
_basketRepository = basketRepository;
|
||||
@@ -22,7 +22,7 @@ namespace Microsoft.eShopWeb.ApplicationCore.Services
|
||||
public async Task AddItemToBasket(int basketId, int catalogItemId, decimal price, int quantity = 1)
|
||||
{
|
||||
var basketSpec = new BasketWithItemsSpecification(basketId);
|
||||
var basket = await _basketRepository.FirstOrDefaultAsync(basketSpec);
|
||||
var basket = await _basketRepository.GetBySpecAsync(basketSpec);
|
||||
Guard.Against.NullBasket(basketId, basket);
|
||||
|
||||
basket.AddItem(catalogItemId, price, quantity);
|
||||
@@ -40,7 +40,7 @@ namespace Microsoft.eShopWeb.ApplicationCore.Services
|
||||
{
|
||||
Guard.Against.Null(quantities, nameof(quantities));
|
||||
var basketSpec = new BasketWithItemsSpecification(basketId);
|
||||
var basket = await _basketRepository.FirstOrDefaultAsync(basketSpec);
|
||||
var basket = await _basketRepository.GetBySpecAsync(basketSpec);
|
||||
Guard.Against.NullBasket(basketId, basket);
|
||||
|
||||
foreach (var item in basket.Items)
|
||||
@@ -60,10 +60,10 @@ namespace Microsoft.eShopWeb.ApplicationCore.Services
|
||||
Guard.Against.NullOrEmpty(anonymousId, nameof(anonymousId));
|
||||
Guard.Against.NullOrEmpty(userName, nameof(userName));
|
||||
var anonymousBasketSpec = new BasketWithItemsSpecification(anonymousId);
|
||||
var anonymousBasket = await _basketRepository.FirstOrDefaultAsync(anonymousBasketSpec);
|
||||
var anonymousBasket = await _basketRepository.GetBySpecAsync(anonymousBasketSpec);
|
||||
if (anonymousBasket == null) return;
|
||||
var userBasketSpec = new BasketWithItemsSpecification(userName);
|
||||
var userBasket = await _basketRepository.FirstOrDefaultAsync(userBasketSpec);
|
||||
var userBasket = await _basketRepository.GetBySpecAsync(userBasketSpec);
|
||||
if (userBasket == null)
|
||||
{
|
||||
userBasket = new Basket(userName);
|
||||
|
||||
@@ -11,14 +11,14 @@ namespace Microsoft.eShopWeb.ApplicationCore.Services
|
||||
{
|
||||
public class OrderService : IOrderService
|
||||
{
|
||||
private readonly IAsyncRepository<Order> _orderRepository;
|
||||
private readonly IRepository<Order> _orderRepository;
|
||||
private readonly IUriComposer _uriComposer;
|
||||
private readonly IAsyncRepository<Basket> _basketRepository;
|
||||
private readonly IAsyncRepository<CatalogItem> _itemRepository;
|
||||
private readonly IRepository<Basket> _basketRepository;
|
||||
private readonly IRepository<CatalogItem> _itemRepository;
|
||||
|
||||
public OrderService(IAsyncRepository<Basket> basketRepository,
|
||||
IAsyncRepository<CatalogItem> itemRepository,
|
||||
IAsyncRepository<Order> orderRepository,
|
||||
public OrderService(IRepository<Basket> basketRepository,
|
||||
IRepository<CatalogItem> itemRepository,
|
||||
IRepository<Order> orderRepository,
|
||||
IUriComposer uriComposer)
|
||||
{
|
||||
_orderRepository = orderRepository;
|
||||
@@ -30,7 +30,7 @@ namespace Microsoft.eShopWeb.ApplicationCore.Services
|
||||
public async Task CreateOrderAsync(int basketId, Address shippingAddress)
|
||||
{
|
||||
var basketSpec = new BasketWithItemsSpecification(basketId);
|
||||
var basket = await _basketRepository.FirstOrDefaultAsync(basketSpec);
|
||||
var basket = await _basketRepository.GetBySpecAsync(basketSpec);
|
||||
|
||||
Guard.Against.NullBasket(basketId, basket);
|
||||
Guard.Against.EmptyBasketOnCheckout(basket.Items);
|
||||
|
||||
@@ -3,7 +3,7 @@ using Microsoft.eShopWeb.ApplicationCore.Entities.BasketAggregate;
|
||||
|
||||
namespace Microsoft.eShopWeb.ApplicationCore.Specifications
|
||||
{
|
||||
public sealed class BasketWithItemsSpecification : Specification<Basket>
|
||||
public sealed class BasketWithItemsSpecification : Specification<Basket>, ISingleResultSpecification
|
||||
{
|
||||
public BasketWithItemsSpecification(int basketId)
|
||||
{
|
||||
|
||||
16
src/ApplicationCore/Specifications/OrderWithItemsByIdSpec.cs
Normal file
16
src/ApplicationCore/Specifications/OrderWithItemsByIdSpec.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using Ardalis.Specification;
|
||||
using Microsoft.eShopWeb.ApplicationCore.Entities.OrderAggregate;
|
||||
|
||||
namespace Microsoft.eShopWeb.ApplicationCore.Specifications
|
||||
{
|
||||
public class OrderWithItemsByIdSpec : Specification<Order>, ISingleResultSpecification
|
||||
{
|
||||
public OrderWithItemsByIdSpec(int orderId)
|
||||
{
|
||||
Query
|
||||
.Where(order => order.Id == orderId)
|
||||
.Include(o => o.OrderItems)
|
||||
.ThenInclude(i => i.ItemOrdered);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user