Browse Source

Map extra properties for the Product aggregate

pull/231/head
gdlcf88 3 years ago
parent
commit
28c9eb82eb
  1. 19
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs
  2. 29
      modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.Application.Tests/Products/ProductAppServiceTests.cs

19
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs

@ -12,6 +12,7 @@ using Microsoft.Extensions.Options;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Caching; using Volo.Abp.Caching;
using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Entities;
using Volo.Abp.ObjectExtending;
namespace EasyAbp.EShop.Products.Products namespace EasyAbp.EShop.Products.Products
{ {
@ -481,7 +482,7 @@ namespace EasyAbp.EShop.Products.Products
protected override Task<Product> MapToEntityAsync(CreateUpdateProductDto createInput) protected override Task<Product> MapToEntityAsync(CreateUpdateProductDto createInput)
{ {
return Task.FromResult(new Product( var entity = new Product(
GuidGenerator.Create(), GuidGenerator.Create(),
CurrentTenant.Id, CurrentTenant.Id,
createInput.StoreId, createInput.StoreId,
@ -496,7 +497,11 @@ namespace EasyAbp.EShop.Products.Products
createInput.IsHidden, createInput.IsHidden,
createInput.PaymentExpireIn, createInput.PaymentExpireIn,
createInput.MediaResources, createInput.MediaResources,
createInput.DisplayOrder)); createInput.DisplayOrder);
createInput.MapExtraPropertiesTo(entity);
return Task.FromResult(entity);
} }
protected override Task MapToEntityAsync(CreateUpdateProductDto updateInput, Product entity) protected override Task MapToEntityAsync(CreateUpdateProductDto updateInput, Product entity)
@ -516,12 +521,14 @@ namespace EasyAbp.EShop.Products.Products
updateInput.MediaResources, updateInput.MediaResources,
updateInput.DisplayOrder); updateInput.DisplayOrder);
updateInput.MapExtraPropertiesTo(entity);
return Task.CompletedTask; return Task.CompletedTask;
} }
protected virtual async Task<ProductSku> MapToProductSkuAsync(CreateProductSkuDto createInput) protected virtual async Task<ProductSku> MapToProductSkuAsync(CreateProductSkuDto createInput)
{ {
return new ProductSku( var entity = new ProductSku(
GuidGenerator.Create(), GuidGenerator.Create(),
await _attributeOptionIdsSerializer.SerializeAsync(createInput.AttributeOptionIds), await _attributeOptionIdsSerializer.SerializeAsync(createInput.AttributeOptionIds),
createInput.Name, createInput.Name,
@ -534,6 +541,10 @@ namespace EasyAbp.EShop.Products.Products
createInput.MediaResources, createInput.MediaResources,
createInput.ProductDetailId createInput.ProductDetailId
); );
createInput.MapExtraPropertiesTo(entity);
return entity;
} }
protected virtual Task MapToProductSkuAsync(UpdateProductSkuDto updateInput, ProductSku entity) protected virtual Task MapToProductSkuAsync(UpdateProductSkuDto updateInput, ProductSku entity)
@ -550,6 +561,8 @@ namespace EasyAbp.EShop.Products.Products
updateInput.ProductDetailId updateInput.ProductDetailId
); );
updateInput.MapExtraPropertiesTo(entity);
return Task.CompletedTask; return Task.CompletedTask;
} }

29
modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.Application.Tests/Products/ProductAppServiceTests.cs

@ -8,7 +8,9 @@ using EasyAbp.EShop.Products.ProductDetails;
using EasyAbp.EShop.Products.Products.Dtos; using EasyAbp.EShop.Products.Products.Dtos;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Volo.Abp.Data;
using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Entities;
using Volo.Abp.ObjectExtending;
using Xunit; using Xunit;
namespace EasyAbp.EShop.Products.Products namespace EasyAbp.EShop.Products.Products
@ -47,14 +49,14 @@ namespace EasyAbp.EShop.Products.Products
IsPublished = true, IsPublished = true,
ProductAttributes = new List<CreateUpdateProductAttributeDto> ProductAttributes = new List<CreateUpdateProductAttributeDto>
{ {
new CreateUpdateProductAttributeDto new()
{ {
DisplayName = "Default Attribute 1", DisplayName = "Default Attribute 1",
Description = "Default Description 1", Description = "Default Description 1",
DisplayOrder = 1, DisplayOrder = 1,
ProductAttributeOptions = new List<CreateUpdateProductAttributeOptionDto> ProductAttributeOptions = new List<CreateUpdateProductAttributeOptionDto>
{ {
new CreateUpdateProductAttributeOptionDto new()
{ {
DisplayName = "Option 1" DisplayName = "Option 1"
} }
@ -63,6 +65,13 @@ namespace EasyAbp.EShop.Products.Products
} }
}; };
ObjectExtensionManager.Instance.AddOrUpdate(new[]
{
typeof(CreateUpdateProductDto), typeof(ProductDto), typeof(Product)
}, config => { config.AddOrUpdateProperty<string>("MyExtraProperty"); });
requestDto.SetProperty("MyExtraProperty", "1234");
// Act // Act
var response = await _productAppService.CreateAsync(requestDto); var response = await _productAppService.CreateAsync(requestDto);
@ -71,6 +80,7 @@ namespace EasyAbp.EShop.Products.Products
response.IsPublished.ShouldBe(true); response.IsPublished.ShouldBe(true);
response.DisplayName.ShouldBe("Pencil"); response.DisplayName.ShouldBe("Pencil");
response.UniqueName.ShouldBe("Unique Pencil"); response.UniqueName.ShouldBe("Unique Pencil");
response.GetProperty<string>("MyExtraProperty").ShouldBe("1234");
UsingDbContext(db => UsingDbContext(db =>
{ {
@ -102,14 +112,22 @@ namespace EasyAbp.EShop.Products.Products
productAttributeOptionId = productAttribute.ProductAttributeOptions.First().Id; productAttributeOptionId = productAttribute.ProductAttributeOptions.First().Id;
}); });
var response = await _productAppService.CreateSkuAsync(productId, new CreateProductSkuDto var requestDto = new CreateProductSkuDto
{ {
AttributeOptionIds = new List<Guid> {productAttributeOptionId}, AttributeOptionIds = new List<Guid> { productAttributeOptionId },
Currency = "USD", Currency = "USD",
Price = 1m, Price = 1m,
OrderMinQuantity = 1, OrderMinQuantity = 1,
OrderMaxQuantity = 10 OrderMaxQuantity = 10
}); };
ObjectExtensionManager.Instance.AddOrUpdate(new[]
{
typeof(CreateProductSkuDto), typeof(ProductSkuDto), typeof(ProductSku)
}, config => { config.AddOrUpdateProperty<string>("MyExtraProperty"); });
requestDto.SetProperty("MyExtraProperty", "1234");
var response = await _productAppService.CreateSkuAsync(productId, requestDto);
response.ShouldNotBeNull(); response.ShouldNotBeNull();
response.MinimumPrice.ShouldBe(1m); response.MinimumPrice.ShouldBe(1m);
@ -123,6 +141,7 @@ namespace EasyAbp.EShop.Products.Products
responseSku.AttributeOptionIds.First().ShouldBe(productAttributeOptionId); responseSku.AttributeOptionIds.First().ShouldBe(productAttributeOptionId);
responseSku.OrderMinQuantity.ShouldBe(1); responseSku.OrderMinQuantity.ShouldBe(1);
responseSku.OrderMaxQuantity.ShouldBe(10); responseSku.OrderMaxQuantity.ShouldBe(10);
responseSku.GetProperty("MyExtraProperty", "1234");
} }
[Fact] [Fact]

Loading…
Cancel
Save