All checks were successful
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 2m14s
106 lines
5.0 KiB
C#
106 lines
5.0 KiB
C#
using CMSMicroservice.Application.NetworkMembershipCQ.Queries.GetNetworkTree;
|
|
using CMSMicroservice.Application.NetworkMembershipCQ.Queries.GetUserNetworkPosition;
|
|
using CMSMicroservice.Protobuf.Protos.NetworkMembership;
|
|
using CMSMicroservice.Domain.Enums;
|
|
|
|
namespace CMSMicroservice.WebApi.Common.Mappings;
|
|
|
|
public class NetworkMembershipProfile : IRegister
|
|
{
|
|
void IRegister.Register(TypeAdapterConfig config)
|
|
{
|
|
// Request mapping
|
|
config.NewConfig<GetNetworkTreeRequest, GetNetworkTreeQuery>()
|
|
.Map(dest => dest.UserId, src => src.UserId)
|
|
.Map(dest => dest.MaxDepth, src => src.MaxDepth != null && src.MaxDepth.Value > 0 ? src.MaxDepth.Value : 3);
|
|
|
|
// Response mapping: تبدیل درخت به لیست مسطح
|
|
config.NewConfig<NetworkTreeDto, GetNetworkTreeResponse>()
|
|
.MapWith(src => ConvertTreeToResponse(src));
|
|
|
|
|
|
config.NewConfig<UserNetworkPositionDto, GetUserNetworkResponse>()
|
|
.Map(dest => dest.Id, src => src.UserId)
|
|
.Map(dest => dest.UserId, src => src.UserId)
|
|
.Map(dest => dest.UserName, src => (src.FirstName + " " + src.LastName).Trim())
|
|
.Map(dest => dest.Mobile, src => src.Mobile ?? "")
|
|
.Map(dest => dest.Email, src => src.Email ?? "")
|
|
.Map(dest => dest.NationalCode, src => src.NationalCode ?? "")
|
|
.Map(dest => dest.ReferralCode, src => src.ReferralCode)
|
|
.Map(dest => dest.IsMobileVerified, src => src.IsMobileVerified)
|
|
.Map(dest => dest.ParentId, src => src.NetworkParentId)
|
|
.Map(dest => dest.ParentName, src => src.ParentFullName ?? "")
|
|
.Map(dest => dest.ParentMobile, src => src.ParentMobile ?? "")
|
|
.Map(dest => dest.NetworkLeg, src => (int)(src.LegPosition ?? NetworkLeg.Left))
|
|
.Map(dest => dest.NetworkLevel, src => 0) // Deprecated field
|
|
.Map(dest => dest.IsInNetwork, src => src.IsInNetwork)
|
|
.Map(dest => dest.LeftChildId, src => src.LeftChildId)
|
|
.Map(dest => dest.LeftChildName, src => src.LeftChildFullName ?? "")
|
|
.Map(dest => dest.LeftChildMobile, src => src.LeftChildMobile ?? "")
|
|
.Map(dest => dest.RightChildId, src => src.RightChildId)
|
|
.Map(dest => dest.RightChildName, src => src.RightChildFullName ?? "")
|
|
.Map(dest => dest.RightChildMobile, src => src.RightChildMobile ?? "")
|
|
.Map(dest => dest.TotalChildren, src => src.TotalChildren)
|
|
.Map(dest => dest.LeftChildCount, src => src.LeftChildCount)
|
|
.Map(dest => dest.RightChildCount, src => src.RightChildCount)
|
|
.Map(dest => dest.TotalLeftLegMembers, src => src.TotalLeftLegMembers)
|
|
.Map(dest => dest.TotalRightLegMembers, src => src.TotalRightLegMembers)
|
|
.Map(dest => dest.TotalNetworkSize, src => src.TotalNetworkSize)
|
|
.Map(dest => dest.MaxNetworkDepth, src => src.MaxNetworkDepth)
|
|
.Map(dest => dest.HasReceivedDayaCredit, src => src.HasReceivedDayaCredit)
|
|
.Map(dest => dest.PackagePurchaseMethod, src => (int)src.PackagePurchaseMethod)
|
|
.Map(dest => dest.HasPurchasedGoldenPackage, src => src.HasPurchasedGoldenPackage)
|
|
.Map(dest => dest.TotalEarnedCommission, src => (double)src.TotalEarnedCommission)
|
|
.Map(dest => dest.TotalPaidCommission, src => (double)src.TotalPaidCommission)
|
|
.Map(dest => dest.PendingCommission, src => (double)src.PendingCommission)
|
|
.Map(dest => dest.TotalBalancesEarned, src => src.TotalBalancesEarned)
|
|
.Map(dest => dest.ActiveMembersInNetwork, src => src.ActiveMembersInNetwork)
|
|
.Map(dest => dest.InactiveMembersInNetwork, src => src.InactiveMembersInNetwork);
|
|
}
|
|
|
|
private static GetNetworkTreeResponse ConvertTreeToResponse(NetworkTreeDto? treeDto)
|
|
{
|
|
var response = new GetNetworkTreeResponse();
|
|
|
|
if (treeDto == null)
|
|
{
|
|
return response;
|
|
}
|
|
|
|
// تبدیل درخت به لیست مسطح
|
|
FlattenTree(treeDto, response.Nodes, null);
|
|
|
|
return response;
|
|
}
|
|
|
|
private static void FlattenTree(NetworkTreeDto node, Google.Protobuf.Collections.RepeatedField<NetworkTreeNodeModel> nodesList, long? parentId)
|
|
{
|
|
var protoNode = new NetworkTreeNodeModel
|
|
{
|
|
UserId = node.UserId,
|
|
UserName = $"{node.FirstName} {node.LastName}".Trim(),
|
|
NetworkLeg = (int)(node.LegPosition ?? NetworkLeg.Left),
|
|
NetworkLevel = node.CurrentDepth,
|
|
IsActive = true
|
|
};
|
|
|
|
if (parentId.HasValue)
|
|
{
|
|
protoNode.ParentId = parentId.Value;
|
|
}
|
|
|
|
nodesList.Add(protoNode);
|
|
|
|
// بازگشتی برای فرزندان
|
|
if (node.LeftChild != null)
|
|
{
|
|
FlattenTree(node.LeftChild, nodesList, node.UserId);
|
|
}
|
|
|
|
if (node.RightChild != null)
|
|
{
|
|
FlattenTree(node.RightChild, nodesList, node.UserId);
|
|
}
|
|
}
|
|
}
|