feat: Add Protobuf definitions for Network Membership service

- Introduced `networkmembership.proto` with RPC methods for retrieving user network tree, statistics, and position.
- Implemented HTTP annotations for gRPC transcoding in the service methods.
- Added support for Google API annotations in `annotations.proto` and `http.proto`.
- Created `ConfigureServices.cs` to register FluentValidation for the Protobuf services.
- Updated project file to include necessary dependencies for gRPC and Protobuf.
This commit is contained in:
masoodafar-web
2025-12-04 19:53:47 +03:30
parent 75e446f80f
commit 9a42060653
55 changed files with 3729 additions and 16 deletions
@@ -0,0 +1,59 @@
using FrontOffice.BFF.Application.CommissionCQ.Queries.GetMyCommissionPayouts;
using FrontOffice.BFF.Application.CommissionCQ.Queries.GetMyWeeklyBalances;
using Google.Protobuf.WellKnownTypes;
using ProtoDto = FrontOffice.BFF.Commission.Protobuf.Protos.Commission;
namespace FrontOffice.BFF.WebApi.Common.Mappings;
public class CommissionProfile : IRegister
{
void IRegister.Register(TypeAdapterConfig config)
{
// Request -> Query mappings
config.NewConfig<ProtoDto.GetMyCommissionPayoutsRequest, GetMyCommissionPayoutsQuery>()
.Map(dest => dest.PageNumber, src => src.PageNumber)
.Map(dest => dest.PageSize, src => src.PageSize)
.Map(dest => dest.WeekNumber, src => src.WeekNumber)
.Map(dest => dest.Status, src => src.Status);
config.NewConfig<ProtoDto.GetMyWeeklyBalancesRequest, GetMyWeeklyBalancesQuery>()
.Map(dest => dest.PageNumber, src => src.PageNumber)
.Map(dest => dest.PageSize, src => src.PageSize)
.Map(dest => dest.WeekNumber, src => src.WeekNumber)
.Map(dest => dest.OnlyActive, src => src.OnlyActive);
// Response mappings
config.NewConfig<GetMyCommissionPayoutsResponseDto, ProtoDto.GetMyCommissionPayoutsResponse>()
.Map(dest => dest.MetaData, src => new ProtoDto.MetaData { TotalCount = src.TotalCount })
.Map(dest => dest.Payouts, src => src.Payouts);
config.NewConfig<CommissionPayoutDto, ProtoDto.CommissionPayoutModel>()
.Map(dest => dest.Id, src => src.Id)
.Map(dest => dest.WeekNumber, src => src.WeekNumber)
.Map(dest => dest.WeekLabel, src => src.WeekLabel)
.Map(dest => dest.BalancesEarned, src => src.BalancesEarned)
.Map(dest => dest.TotalAmount, src => src.TotalAmount)
.Map(dest => dest.AmountFormatted, src => src.AmountFormatted)
.Map(dest => dest.Status, src => src.Status)
.Map(dest => dest.StatusBadgeColor, src => src.StatusBadgeColor)
.Map(dest => dest.CalculatedDate, src => Timestamp.FromDateTime(DateTime.SpecifyKind(src.CalculatedDate, DateTimeKind.Utc)))
.Map(dest => dest.DatePersian, src => src.DatePersian);
config.NewConfig<GetMyWeeklyBalancesResponseDto, ProtoDto.GetMyWeeklyBalancesResponse>()
.Map(dest => dest.MetaData, src => new ProtoDto.MetaData { TotalCount = src.TotalCount })
.Map(dest => dest.Balances, src => src.Balances)
.Map(dest => dest.TotalLeftBalances, src => src.TotalLeftBalances)
.Map(dest => dest.TotalRightBalances, src => src.TotalRightBalances)
.Map(dest => dest.WeakerLeg, src => src.WeakerLeg);
config.NewConfig<WeeklyBalanceItemDto, ProtoDto.WeeklyBalanceModel>()
.Map(dest => dest.Id, src => src.Id)
.Map(dest => dest.WeekNumber, src => src.WeekNumber)
.Map(dest => dest.LeftLegBalances, src => src.LeftLegBalances)
.Map(dest => dest.RightLegBalances, src => src.RightLegBalances)
.Map(dest => dest.TotalBalances, src => src.TotalBalances)
.Map(dest => dest.WeeklyPoolContribution, src => src.WeeklyPoolContribution)
.Map(dest => dest.IsExpired, src => src.IsExpired)
.Map(dest => dest.DatePersian, src => src.DatePersian);
}
}