Removing the GetById from IRepository

- removed it and updated everywhere, where it was called to use the async version
This commit is contained in:
Eric Fleming
2019-03-01 21:42:52 -05:00
parent 239d217825
commit 058d4e6f5a
5 changed files with 30 additions and 29 deletions

View File

@@ -5,7 +5,6 @@ namespace Microsoft.eShopWeb.ApplicationCore.Interfaces
{ {
public interface IRepository<T> where T : BaseEntity public interface IRepository<T> where T : BaseEntity
{ {
T GetById(int id);
T GetSingleBySpec(ISpecification<T> spec); T GetSingleBySpec(ISpecification<T> spec);
IEnumerable<T> ListAll(); IEnumerable<T> ListAll();
IEnumerable<T> List(ISpecification<T> spec); IEnumerable<T> List(ISpecification<T> spec);

View File

@@ -21,11 +21,6 @@ namespace Microsoft.eShopWeb.Infrastructure.Data
_dbContext = dbContext; _dbContext = dbContext;
} }
public virtual T GetById(int id)
{
return _dbContext.Set<T>().Find(id);
}
public T GetSingleBySpec(ISpecification<T> spec) public T GetSingleBySpec(ISpecification<T> spec)
{ {
return List(spec).FirstOrDefault(); return List(spec).FirstOrDefault();

View File

@@ -14,10 +14,10 @@ namespace Microsoft.eShopWeb.Web.Services
{ {
private readonly IAsyncRepository<Basket> _basketRepository; private readonly IAsyncRepository<Basket> _basketRepository;
private readonly IUriComposer _uriComposer; private readonly IUriComposer _uriComposer;
private readonly IRepository<CatalogItem> _itemRepository; private readonly IAsyncRepository<CatalogItem> _itemRepository;
public BasketViewModelService(IAsyncRepository<Basket> basketRepository, public BasketViewModelService(IAsyncRepository<Basket> basketRepository,
IRepository<CatalogItem> itemRepository, IAsyncRepository<CatalogItem> itemRepository,
IUriComposer uriComposer) IUriComposer uriComposer)
{ {
_basketRepository = basketRepository; _basketRepository = basketRepository;
@@ -34,30 +34,15 @@ namespace Microsoft.eShopWeb.Web.Services
{ {
return await CreateBasketForUser(userName); return await CreateBasketForUser(userName);
} }
return CreateViewModelFromBasket(basket); return await CreateViewModelFromBasket(basket);
} }
private BasketViewModel CreateViewModelFromBasket(Basket basket) private async Task<BasketViewModel> CreateViewModelFromBasket(Basket basket)
{ {
var viewModel = new BasketViewModel(); var viewModel = new BasketViewModel();
viewModel.Id = basket.Id; viewModel.Id = basket.Id;
viewModel.BuyerId = basket.BuyerId; viewModel.BuyerId = basket.BuyerId;
viewModel.Items = basket.Items.Select(i => viewModel.Items = await GetBasketItems(basket.Items); ;
{
var itemModel = new BasketItemViewModel()
{
Id = i.Id,
UnitPrice = i.UnitPrice,
Quantity = i.Quantity,
CatalogItemId = i.CatalogItemId
};
var item = _itemRepository.GetById(i.CatalogItemId);
itemModel.PictureUrl = _uriComposer.ComposePicUri(item.PictureUri);
itemModel.ProductName = item.Name;
return itemModel;
})
.ToList();
return viewModel; return viewModel;
} }
@@ -73,5 +58,26 @@ namespace Microsoft.eShopWeb.Web.Services
Items = new List<BasketItemViewModel>() Items = new List<BasketItemViewModel>()
}; };
} }
private async Task<List<BasketItemViewModel>> GetBasketItems(IReadOnlyCollection<BasketItem> basketItems)
{
var items = new List<BasketItemViewModel>();
foreach (var item in basketItems)
{
var itemModel = new BasketItemViewModel
{
Id = item.Id,
UnitPrice = item.UnitPrice,
Quantity = item.Quantity,
CatalogItemId = item.CatalogItemId
};
var catalogItem = await _itemRepository.GetByIdAsync(item.CatalogItemId);
itemModel.PictureUrl = _uriComposer.ComposePicUri(catalogItem.PictureUri);
itemModel.ProductName = catalogItem.Name;
items.Add(itemModel);
}
return items;
}
} }
} }

View File

@@ -38,7 +38,7 @@ namespace Microsoft.eShopWeb.IntegrationTests.Repositories.BasketItemRepositoryT
await _basketItemRepository.DeleteAsync(existingBasket.Items.FirstOrDefault()); await _basketItemRepository.DeleteAsync(existingBasket.Items.FirstOrDefault());
_catalogContext.SaveChanges(); _catalogContext.SaveChanges();
var basketFromDB = _basketRepository.GetById(BasketBuilder.BasketId); var basketFromDB = await _basketRepository.GetByIdAsync(BasketBuilder.BasketId);
Assert.Equal(0, basketFromDB.Items.Count); Assert.Equal(0, basketFromDB.Items.Count);
} }

View File

@@ -4,6 +4,7 @@ using System.Linq;
using Microsoft.eShopWeb.UnitTests.Builders; using Microsoft.eShopWeb.UnitTests.Builders;
using Xunit; using Xunit;
using Xunit.Abstractions; using Xunit.Abstractions;
using System.Threading.Tasks;
namespace Microsoft.eShopWeb.IntegrationTests.Repositories.OrderRepositoryTests namespace Microsoft.eShopWeb.IntegrationTests.Repositories.OrderRepositoryTests
{ {
@@ -24,7 +25,7 @@ namespace Microsoft.eShopWeb.IntegrationTests.Repositories.OrderRepositoryTests
} }
[Fact] [Fact]
public void GetsExistingOrder() public async Task GetsExistingOrder()
{ {
var existingOrder = OrderBuilder.WithDefaultValues(); var existingOrder = OrderBuilder.WithDefaultValues();
_catalogContext.Orders.Add(existingOrder); _catalogContext.Orders.Add(existingOrder);
@@ -32,7 +33,7 @@ namespace Microsoft.eShopWeb.IntegrationTests.Repositories.OrderRepositoryTests
int orderId = existingOrder.Id; int orderId = existingOrder.Id;
_output.WriteLine($"OrderId: {orderId}"); _output.WriteLine($"OrderId: {orderId}");
var orderFromRepo = _orderRepository.GetById(orderId); var orderFromRepo = await _orderRepository.GetByIdAsync(orderId);
Assert.Equal(OrderBuilder.TestBuyerId, orderFromRepo.BuyerId); Assert.Equal(OrderBuilder.TestBuyerId, orderFromRepo.BuyerId);
// Note: Using InMemoryDatabase OrderItems is available. Will be null if using SQL DB. // Note: Using InMemoryDatabase OrderItems is available. Will be null if using SQL DB.