From 058d4e6f5ab53562f232e0d8579501abe49313a6 Mon Sep 17 00:00:00 2001 From: Eric Fleming Date: Fri, 1 Mar 2019 21:42:52 -0500 Subject: [PATCH] Removing the GetById from IRepository - removed it and updated everywhere, where it was called to use the async version --- src/ApplicationCore/Interfaces/IRepository.cs | 1 - src/Infrastructure/Data/EfRepository.cs | 5 -- src/Web/Services/BasketViewModelService.cs | 46 +++++++++++-------- .../DeleteAsync_Should.cs | 2 +- .../OrderRepositoryTests/GetById.cs | 5 +- 5 files changed, 30 insertions(+), 29 deletions(-) diff --git a/src/ApplicationCore/Interfaces/IRepository.cs b/src/ApplicationCore/Interfaces/IRepository.cs index f7bf513..595c164 100644 --- a/src/ApplicationCore/Interfaces/IRepository.cs +++ b/src/ApplicationCore/Interfaces/IRepository.cs @@ -5,7 +5,6 @@ namespace Microsoft.eShopWeb.ApplicationCore.Interfaces { public interface IRepository where T : BaseEntity { - T GetById(int id); T GetSingleBySpec(ISpecification spec); IEnumerable ListAll(); IEnumerable List(ISpecification spec); diff --git a/src/Infrastructure/Data/EfRepository.cs b/src/Infrastructure/Data/EfRepository.cs index 4fe8c60..35b8802 100644 --- a/src/Infrastructure/Data/EfRepository.cs +++ b/src/Infrastructure/Data/EfRepository.cs @@ -21,11 +21,6 @@ namespace Microsoft.eShopWeb.Infrastructure.Data _dbContext = dbContext; } - public virtual T GetById(int id) - { - return _dbContext.Set().Find(id); - } - public T GetSingleBySpec(ISpecification spec) { return List(spec).FirstOrDefault(); diff --git a/src/Web/Services/BasketViewModelService.cs b/src/Web/Services/BasketViewModelService.cs index 11e9612..b4801f6 100644 --- a/src/Web/Services/BasketViewModelService.cs +++ b/src/Web/Services/BasketViewModelService.cs @@ -14,10 +14,10 @@ namespace Microsoft.eShopWeb.Web.Services { private readonly IAsyncRepository _basketRepository; private readonly IUriComposer _uriComposer; - private readonly IRepository _itemRepository; + private readonly IAsyncRepository _itemRepository; public BasketViewModelService(IAsyncRepository basketRepository, - IRepository itemRepository, + IAsyncRepository itemRepository, IUriComposer uriComposer) { _basketRepository = basketRepository; @@ -34,30 +34,15 @@ namespace Microsoft.eShopWeb.Web.Services { return await CreateBasketForUser(userName); } - return CreateViewModelFromBasket(basket); + return await CreateViewModelFromBasket(basket); } - private BasketViewModel CreateViewModelFromBasket(Basket basket) + private async Task CreateViewModelFromBasket(Basket basket) { var viewModel = new BasketViewModel(); viewModel.Id = basket.Id; viewModel.BuyerId = basket.BuyerId; - viewModel.Items = basket.Items.Select(i => - { - 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(); + viewModel.Items = await GetBasketItems(basket.Items); ; return viewModel; } @@ -73,5 +58,26 @@ namespace Microsoft.eShopWeb.Web.Services Items = new List() }; } + + private async Task> GetBasketItems(IReadOnlyCollection basketItems) + { + var items = new List(); + 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; + } } } diff --git a/tests/IntegrationTests/Repositories/BasketItemRepositoryTests/DeleteAsync_Should.cs b/tests/IntegrationTests/Repositories/BasketItemRepositoryTests/DeleteAsync_Should.cs index c9014f1..73774c2 100644 --- a/tests/IntegrationTests/Repositories/BasketItemRepositoryTests/DeleteAsync_Should.cs +++ b/tests/IntegrationTests/Repositories/BasketItemRepositoryTests/DeleteAsync_Should.cs @@ -38,7 +38,7 @@ namespace Microsoft.eShopWeb.IntegrationTests.Repositories.BasketItemRepositoryT await _basketItemRepository.DeleteAsync(existingBasket.Items.FirstOrDefault()); _catalogContext.SaveChanges(); - var basketFromDB = _basketRepository.GetById(BasketBuilder.BasketId); + var basketFromDB = await _basketRepository.GetByIdAsync(BasketBuilder.BasketId); Assert.Equal(0, basketFromDB.Items.Count); } diff --git a/tests/IntegrationTests/Repositories/OrderRepositoryTests/GetById.cs b/tests/IntegrationTests/Repositories/OrderRepositoryTests/GetById.cs index b069e1a..7991c29 100644 --- a/tests/IntegrationTests/Repositories/OrderRepositoryTests/GetById.cs +++ b/tests/IntegrationTests/Repositories/OrderRepositoryTests/GetById.cs @@ -4,6 +4,7 @@ using System.Linq; using Microsoft.eShopWeb.UnitTests.Builders; using Xunit; using Xunit.Abstractions; +using System.Threading.Tasks; namespace Microsoft.eShopWeb.IntegrationTests.Repositories.OrderRepositoryTests { @@ -24,7 +25,7 @@ namespace Microsoft.eShopWeb.IntegrationTests.Repositories.OrderRepositoryTests } [Fact] - public void GetsExistingOrder() + public async Task GetsExistingOrder() { var existingOrder = OrderBuilder.WithDefaultValues(); _catalogContext.Orders.Add(existingOrder); @@ -32,7 +33,7 @@ namespace Microsoft.eShopWeb.IntegrationTests.Repositories.OrderRepositoryTests int orderId = existingOrder.Id; _output.WriteLine($"OrderId: {orderId}"); - var orderFromRepo = _orderRepository.GetById(orderId); + var orderFromRepo = await _orderRepository.GetByIdAsync(orderId); Assert.Equal(OrderBuilder.TestBuyerId, orderFromRepo.BuyerId); // Note: Using InMemoryDatabase OrderItems is available. Will be null if using SQL DB.