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
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with
15 additions and
4 deletions
-
src/ApplicationCore/Interfaces/IAsyncRepository.cs
-
src/ApplicationCore/Services/BasketService.cs
-
src/Infrastructure/Data/EfRepository.cs
-
src/Web/Services/BasketViewModelService.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); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -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); |
|
|
|
|
|
|
|
@ -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); |
|
|
|
|
|
|
|
@ -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) |
|
|
|
{ |
|
|
|
|