Browse Source

add FirstAsync in respository (#370)

* add FirstAsync in respository

* use new FirstOrDefaultAsync() method from repository
main
Cédric Michel 6 years ago
committed by GitHub
parent
commit
fdb4869c0b
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      src/ApplicationCore/Interfaces/IAsyncRepository.cs
  2. 4
      src/ApplicationCore/Services/BasketService.cs
  3. 10
      src/Infrastructure/Data/EfRepository.cs
  4. 3
      src/Web/Services/BasketViewModelService.cs

2
src/ApplicationCore/Interfaces/IAsyncRepository.cs

@ -13,5 +13,7 @@ namespace Microsoft.eShopWeb.ApplicationCore.Interfaces
Task UpdateAsync(T entity);
Task DeleteAsync(T entity);
Task<int> CountAsync(ISpecification<T> spec);
Task<T> FirstAsync(ISpecification<T> spec);
Task<T> FirstOrDefaultAsync(ISpecification<T> spec);
}
}

4
src/ApplicationCore/Services/BasketService.cs

@ -39,7 +39,7 @@ namespace Microsoft.eShopWeb.ApplicationCore.Services
{
Guard.Against.NullOrEmpty(userName, nameof(userName));
var basketSpec = new BasketWithItemsSpecification(userName);
var basket = (await _basketRepository.ListAsync(basketSpec)).FirstOrDefault();
var basket = (await _basketRepository.FirstOrDefaultAsync(basketSpec));
if (basket == null)
{
_logger.LogInformation($"No basket found for {userName}");
@ -72,7 +72,7 @@ namespace Microsoft.eShopWeb.ApplicationCore.Services
Guard.Against.NullOrEmpty(anonymousId, nameof(anonymousId));
Guard.Against.NullOrEmpty(userName, nameof(userName));
var basketSpec = new BasketWithItemsSpecification(anonymousId);
var basket = (await _basketRepository.ListAsync(basketSpec)).FirstOrDefault();
var basket = (await _basketRepository.FirstOrDefaultAsync(basketSpec));
if (basket == null) return;
basket.SetNewBuyerId(userName);
await _basketRepository.UpdateAsync(basket);

10
src/Infrastructure/Data/EfRepository.cs

@ -61,6 +61,16 @@ namespace Microsoft.eShopWeb.Infrastructure.Data
await _dbContext.SaveChangesAsync();
}
public async Task<T> FirstAsync(ISpecification<T> spec)
{
return await ApplySpecification(spec).FirstAsync();
}
public async Task<T> FirstOrDefaultAsync(ISpecification<T> spec)
{
return await ApplySpecification(spec).FirstOrDefaultAsync();
}
private IQueryable<T> ApplySpecification(ISpecification<T> spec)
{
return SpecificationEvaluator<T>.GetQuery(_dbContext.Set<T>().AsQueryable(), spec);

3
src/Web/Services/BasketViewModelService.cs

@ -5,7 +5,6 @@ using Microsoft.eShopWeb.ApplicationCore.Specifications;
using Microsoft.eShopWeb.Web.Interfaces;
using Microsoft.eShopWeb.Web.Pages.Basket;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Microsoft.eShopWeb.Web.Services
@ -28,7 +27,7 @@ namespace Microsoft.eShopWeb.Web.Services
public async Task<BasketViewModel> GetOrCreateBasketForUser(string userName)
{
var basketSpec = new BasketWithItemsSpecification(userName);
var basket = (await _basketRepository.ListAsync(basketSpec)).FirstOrDefault();
var basket = (await _basketRepository.FirstOrDefaultAsync(basketSpec));
if (basket == null)
{

Loading…
Cancel
Save