using CMSMicroservice.Application.UserPackagePurchaseCQ.Queries.GetAllUserPackagePurchaseByFilter; using CMSMicroservice.Application.UserPackagePurchaseCQ.Queries.GetUserPackagePurchaseSummary; using CMSMicroservice.Protobuf.Protos.UserPackagePurchase; using Google.Protobuf.WellKnownTypes; using Mapster; using AppFilter = CMSMicroservice.Application.UserPackagePurchaseCQ.Queries.GetAllUserPackagePurchaseByFilter.GetAllUserPackagePurchaseByFilterFilter; using ProtoFilter = CMSMicroservice.Protobuf.Protos.UserPackagePurchase.GetAllUserPackagePurchaseByFilterFilter; namespace CMSMicroservice.WebApi.Common.Mappings; public class UserPackagePurchaseProfile : IRegister { public void Register(TypeAdapterConfig config) { config.NewConfig() .MapWith(src => new GetAllUserPackagePurchaseByFilterQuery { PaginationState = MapPagination(src.PaginationState), SortBy = src.HasSortBy ? src.SortBy : null, Filter = MapFilter(src.Filter) }); config.NewConfig() .MapWith(src => new GetAllUserPackagePurchaseByFilterResponse { MetaData = MapMeta(src.MetaData), Models = { src.Models?.Select(m => new UserPackagePurchaseModel { Id = m.Id, UserId = m.UserId, UserName = m.UserName, UserMobile = m.UserMobile, PackageId = m.PackageId, PackageName = m.PackageName, PurchaseMethod = (int)m.PurchaseMethod, PurchasedAt = Timestamp.FromDateTime(DateTime.SpecifyKind(m.PurchasedAt, DateTimeKind.Utc)), Amount = m.Amount, OrderId = m.OrderId, TransactionId = m.TransactionId, CreatedAt = Timestamp.FromDateTimeOffset(m.Created) }) ?? [] } }); config.NewConfig() .MapWith(src => new GetUserPackagePurchaseSummaryQuery { Filter = MapFilter(src.Filter) }); config.NewConfig() .MapWith(src => new GetUserPackagePurchaseSummaryResponse { TotalCount = src.TotalCount, TotalAmount = src.TotalAmount }); } private static AppFilter? MapFilter(ProtoFilter? src) { if (src == null) return null; return new AppFilter { UserId = src.HasUserId ? src.UserId : null, PackageId = src.HasPackageId ? src.PackageId : null, PurchaseMethod = src.HasPurchaseMethod ? (Domain.Enums.PackagePurchaseMethod)src.PurchaseMethod : null, PurchasedFrom = src.PurchasedFrom?.ToDateTime(), PurchasedTo = src.PurchasedTo?.ToDateTime(), MinAmount = src.HasMinAmount ? src.MinAmount : null, MaxAmount = src.HasMaxAmount ? src.MaxAmount : null }; } private static Application.Common.Models.PaginationState? MapPagination(CMSMicroservice.Protobuf.Protos.PaginationState? ps) => ps == null ? null : new Application.Common.Models.PaginationState { PageNumber = ps.PageNumber > 0 ? ps.PageNumber : 1, PageSize = ps.PageSize > 0 ? ps.PageSize : 20 }; private static CMSMicroservice.Protobuf.Protos.MetaData MapMeta(Application.Common.Models.MetaData meta) => new() { CurrentPage = meta.CurrentPage, PageSize = meta.PageSize, TotalCount = meta.TotalCount, TotalPage = meta.TotalPage }; }