From aca28fce40d7cc0371cab30eaa61e2090bf077ce Mon Sep 17 00:00:00 2001 From: masoodafar-web Date: Thu, 8 Jan 2026 18:09:30 +0330 Subject: [PATCH] feat: Implement DiscountProductProfile for mapping Discount Product commands and queries --- .../Common/Mappings/DiscountProductProfile.cs | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 src/BackOffice.BFF.WebApi/Common/Mappings/DiscountProductProfile.cs diff --git a/src/BackOffice.BFF.WebApi/Common/Mappings/DiscountProductProfile.cs b/src/BackOffice.BFF.WebApi/Common/Mappings/DiscountProductProfile.cs new file mode 100644 index 0000000..dc06167 --- /dev/null +++ b/src/BackOffice.BFF.WebApi/Common/Mappings/DiscountProductProfile.cs @@ -0,0 +1,92 @@ +using BackOffice.BFF.Application.DiscountProductCQ.Commands.CreateDiscountProduct; +using BackOffice.BFF.Application.DiscountProductCQ.Commands.UpdateDiscountProduct; +using BackOffice.BFF.Application.DiscountProductCQ.Commands.DeleteDiscountProduct; +using BackOffice.BFF.Application.DiscountProductCQ.Queries.GetDiscountProducts; +using BackOffice.BFF.Application.DiscountProductCQ.Queries.GetDiscountProductById; +using BackOffice.BFF.DiscountProduct.Protobuf.Protos.DiscountProduct; +using Mapster; +using CreateFileModel = BackOffice.BFF.Application.DiscountProductCQ.Commands.CreateDiscountProduct.DiscountProductFileModel; +using UpdateFileModel = BackOffice.BFF.Application.DiscountProductCQ.Commands.UpdateDiscountProduct.DiscountProductFileModel; + +namespace BackOffice.BFF.WebApi.Common.Mappings; + +public class DiscountProductProfile : IRegister +{ + public void Register(TypeAdapterConfig config) + { + // Request to Query/Command mappings + config.NewConfig() + .Map(dest => dest.CategoryId, src => src.CategoryId) + .Map(dest => dest.SearchQuery, src => src.SearchQuery) + .Map(dest => dest.MinPrice, src => src.MinPrice) + .Map(dest => dest.MaxPrice, src => src.MaxPrice) + .Map(dest => dest.IsActive, src => src.IsActive) + .Map(dest => dest.InStock, src => src.InStock) + .Map(dest => dest.PageNumber, src => src.PageNumber) + .Map(dest => dest.PageSize, src => src.PageSize); + + config.NewConfig() + .Map(dest => dest.ProductId, src => src.ProductId); + + config.NewConfig() + .Map(dest => dest.Title, src => src.Title) + .Map(dest => dest.ShortInformation, src => src.ShortInfomation) + .Map(dest => dest.FullInformation, src => src.FullInformation) + .Map(dest => dest.Price, src => src.Price) + .Map(dest => dest.MaxDiscountPercent, src => src.MaxDiscountPercent) + .Map(dest => dest.SortOrder, src => src.SortOrder) + .Map(dest => dest.IsActive, src => src.IsActive) + .Map(dest => dest.CategoryIds, src => src.CategoryIds) + .Map(dest => dest.ImageFile, src => src.ImageFile != null ? new CreateFileModel { File = src.ImageFile.File.ToByteArray(), FileName = src.ImageFile.FileName, Mime = src.ImageFile.Mime } : null) + .Map(dest => dest.ThumbnailFile, src => src.ThumbnailFile != null ? new CreateFileModel { File = src.ThumbnailFile.File.ToByteArray(), FileName = src.ThumbnailFile.FileName, Mime = src.ThumbnailFile.Mime } : null); + + config.NewConfig() + .Map(dest => dest.ProductId, src => src.ProductId) + .Map(dest => dest.Title, src => src.Title) + .Map(dest => dest.ShortInformation, src => src.ShortInfomation) + .Map(dest => dest.FullInformation, src => src.FullInformation) + .Map(dest => dest.Price, src => src.Price) + .Map(dest => dest.MaxDiscountPercent, src => src.MaxDiscountPercent) + .Map(dest => dest.SortOrder, src => src.SortOrder) + .Map(dest => dest.IsActive, src => src.IsActive) + .Map(dest => dest.CategoryIds, src => src.CategoryIds) + .Map(dest => dest.ImageFile, src => src.ImageFile != null ? new UpdateFileModel { File = src.ImageFile.File.ToByteArray(), FileName = src.ImageFile.FileName, Mime = src.ImageFile.Mime } : null) + .Map(dest => dest.ThumbnailFile, src => src.ThumbnailFile != null ? new UpdateFileModel { File = src.ThumbnailFile.File.ToByteArray(), FileName = src.ThumbnailFile.FileName, Mime = src.ThumbnailFile.Mime } : null); + + config.NewConfig() + .Map(dest => dest.ProductId, src => src.ProductId); + + // Response mappings + config.NewConfig() + .Map(dest => dest.MetaData, src => src.MetaData) + .Map(dest => dest.Models, src => src.Products); + + config.NewConfig() + .Map(dest => dest.Id, src => src.Id) + .Map(dest => dest.Title, src => src.Title) + .Map(dest => dest.ShortInfomation, src => src.ShortInformation) + .Map(dest => dest.Price, src => src.Price) + .Map(dest => dest.MaxDiscountPercent, src => src.MaxDiscountPercent) + .Map(dest => dest.ImagePath, src => src.ImagePath) + .Map(dest => dest.ThumbnailPath, src => src.ThumbnailPath) + .Map(dest => dest.RemainingCount, src => src.RemainingCount) + .Map(dest => dest.ViewCount, src => src.ViewCount) + .Map(dest => dest.IsActive, src => src.IsActive) + .Map(dest => dest.Created, src => src.Created != DateTime.MinValue ? Google.Protobuf.WellKnownTypes.Timestamp.FromDateTime(src.Created.ToUniversalTime()) : null); + + config.NewConfig() + .Map(dest => dest.Id, src => src.Id) + .Map(dest => dest.Title, src => src.Title) + .Map(dest => dest.ShortInfomation, src => src.ShortInformation) + .Map(dest => dest.FullInformation, src => src.FullInformation) + .Map(dest => dest.Price, src => src.Price) + .Map(dest => dest.MaxDiscountPercent, src => src.MaxDiscountPercent) + .Map(dest => dest.ImagePath, src => src.ImagePath) + .Map(dest => dest.ThumbnailPath, src => src.ThumbnailPath) + .Map(dest => dest.RemainingCount, src => src.RemainingCount) + .Map(dest => dest.ViewCount, src => src.ViewCount) + .Map(dest => dest.SortOrder, src => src.SortOrder) + .Map(dest => dest.IsActive, src => src.IsActive) + .Map(dest => dest.Created, src => src.Created != DateTime.MinValue ? Google.Protobuf.WellKnownTypes.Timestamp.FromDateTime(src.Created.ToUniversalTime()) : null); + } +}