From aa66ca10c86cbf140c7ecd4d461565e6d8c708e7 Mon Sep 17 00:00:00 2001 From: masoodafar-web Date: Mon, 8 Dec 2025 04:10:46 +0330 Subject: [PATCH] feat: add Mapster mapping and update network tree request --- .../CMSMicroservice.Protobuf.csproj | 4 +- .../Protos/networkmembership.proto | 2 +- .../CMSMicroservice.WebApi.csproj | 1 + .../Mappings/NetworkMembershipProfile.cs | 65 +++++++++++++++++++ .../Services/NetworkMembershipService.cs | 2 + 5 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 src/CMSMicroservice.WebApi/Common/Mappings/NetworkMembershipProfile.cs diff --git a/src/CMSMicroservice.Protobuf/CMSMicroservice.Protobuf.csproj b/src/CMSMicroservice.Protobuf/CMSMicroservice.Protobuf.csproj index 5551e40..3b766a9 100644 --- a/src/CMSMicroservice.Protobuf/CMSMicroservice.Protobuf.csproj +++ b/src/CMSMicroservice.Protobuf/CMSMicroservice.Protobuf.csproj @@ -3,7 +3,7 @@ net9.0 enable enable - 0.0.142 + 0.0.145 None False False @@ -60,7 +60,7 @@ $(PackageOutputPath)$(PackageId).$(Version).nupkg - dotnet nuget push **/*.nupkg --source https://git.afrino.co/api/packages/FourSat/nuget/index.json --api-key 061a5cb15517c6da39c16cfce8556c55ae104d0d --skip-duplicate && del "$(NugetPackagePath)" + dotnet nuget push **/*.nupkg --source https://git.afrino.co/api/packages/FourSat/nuget/index.json --api-key 061a5cb15517c6da39c16cfce8556c55ae104d0d --skip-duplicate diff --git a/src/CMSMicroservice.Protobuf/Protos/networkmembership.proto b/src/CMSMicroservice.Protobuf/Protos/networkmembership.proto index c279f90..be9a22a 100644 --- a/src/CMSMicroservice.Protobuf/Protos/networkmembership.proto +++ b/src/CMSMicroservice.Protobuf/Protos/networkmembership.proto @@ -104,7 +104,7 @@ message GetUserNetworkResponse // GetNetworkTree Query message GetNetworkTreeRequest { - int64 root_user_id = 1; + int64 user_id = 1; google.protobuf.Int32Value max_depth = 2; google.protobuf.BoolValue only_active = 3; } diff --git a/src/CMSMicroservice.WebApi/CMSMicroservice.WebApi.csproj b/src/CMSMicroservice.WebApi/CMSMicroservice.WebApi.csproj index c82c6a7..a9f4cc3 100644 --- a/src/CMSMicroservice.WebApi/CMSMicroservice.WebApi.csproj +++ b/src/CMSMicroservice.WebApi/CMSMicroservice.WebApi.csproj @@ -14,6 +14,7 @@ + diff --git a/src/CMSMicroservice.WebApi/Common/Mappings/NetworkMembershipProfile.cs b/src/CMSMicroservice.WebApi/Common/Mappings/NetworkMembershipProfile.cs new file mode 100644 index 0000000..73d4c2a --- /dev/null +++ b/src/CMSMicroservice.WebApi/Common/Mappings/NetworkMembershipProfile.cs @@ -0,0 +1,65 @@ +using CMSMicroservice.Application.NetworkMembershipCQ.Queries.GetNetworkTree; +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() + .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() + .MapWith(src => ConvertTreeToResponse(src)); + } + + 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 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); + } + } +} diff --git a/src/CMSMicroservice.WebApi/Services/NetworkMembershipService.cs b/src/CMSMicroservice.WebApi/Services/NetworkMembershipService.cs index 0945459..1690065 100644 --- a/src/CMSMicroservice.WebApi/Services/NetworkMembershipService.cs +++ b/src/CMSMicroservice.WebApi/Services/NetworkMembershipService.cs @@ -41,6 +41,8 @@ public class NetworkMembershipService : NetworkMembershipContract.NetworkMembers public override async Task GetNetworkTree(GetNetworkTreeRequest request, ServerCallContext context) { + + var x=request.Adapt(); return await _dispatchRequestToCQRS.Handle(request, context); }