Add product AutoMapper profile

This commit is contained in:
lumijiez
2025-05-04 00:55:28 +03:00
parent 7fd2af2d5a
commit 91b3115073
2 changed files with 82 additions and 0 deletions

View File

@@ -0,0 +1,74 @@
using AutoMapper;
using Printbase.Domain.Entities.Products;
using Printbase.Infrastructure.DbEntities.Products;
namespace Printbase.Infrastructure.Mapping;
public class ProductMappingProfile : Profile
{
public ProductMappingProfile()
{
CreateMap<Product, ProductDbEntity>()
.ForMember(dest => dest.Variants, opt => opt.MapFrom(src => src.Variants))
.ForMember(dest => dest.Type, opt => opt.Ignore());
CreateMap<ProductDbEntity, Product>()
.ConstructUsing((src, _) => new Product(
src.Id,
src.Name,
src.TypeId,
src.Description,
src.Discount))
.ForMember(dest => dest.Variants, opt => opt.Ignore())
.AfterMap((src, dest, ctx) =>
{
foreach (var dbVariant in src.Variants)
{
var variant = ctx.Mapper.Map<ProductVariant>(dbVariant);
dest.AddVariant(variant);
}
});
CreateMap<ProductVariant, ProductVariantDbEntity>()
.ForMember(dest => dest.Product, opt => opt.Ignore());
CreateMap<ProductVariantDbEntity, ProductVariant>()
.ConstructUsing((src, _) => new ProductVariant(
src.Id,
src.ProductId,
src.Price,
src.Color,
src.Size,
src.Discount,
src.Stock));
CreateMap<ProductType, ProductTypeDbEntity>()
.ForMember(dest => dest.Group, opt => opt.Ignore())
.ForMember(dest => dest.Products, opt => opt.Ignore());
CreateMap<ProductTypeDbEntity, ProductType>()
.ConstructUsing((src, _) => new ProductType(
src.Id,
src.Name,
src.GroupId,
src.Description));
CreateMap<ProductGroup, ProductGroupDbEntity>()
.ForMember(dest => dest.Types, opt => opt.MapFrom(src => src.Types));
CreateMap<ProductGroupDbEntity, ProductGroup>()
.ConstructUsing((src, _) => new ProductGroup(
src.Id,
src.Name,
src.Description))
.ForMember(dest => dest.Types, opt => opt.Ignore())
.AfterMap((src, dest, ctx) =>
{
foreach (var dbType in src.Types)
{
var type = ctx.Mapper.Map<ProductType>(dbType);
dest.AddType(type);
}
});
}
}

View File

@@ -6,4 +6,12 @@
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AutoMapper" Version="14.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Printbase.Domain\Printbase.Domain.csproj" />
</ItemGroup>
</Project>