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,42 @@
using FrontOffice.BFF.Application.ClubMembershipCQ.Queries.GetMyClubMembership;
using FrontOffice.BFF.Application.ClubMembershipCQ.Commands.ActivateMyClubMembership;
using Google.Protobuf.WellKnownTypes;
using ProtoDto = FrontOffice.BFF.ClubMembership.Protobuf.Protos.ClubMembership;
namespace FrontOffice.BFF.WebApi.Common.Mappings;
public class ClubMembershipProfile : IRegister
{
void IRegister.Register(TypeAdapterConfig config)
{
// Request -> Command mappings
config.NewConfig<ProtoDto.ActivateMyClubMembershipRequest, ActivateMyClubMembershipCommand>()
.Map(dest => dest.PackageId, src => src.PackageId)
.Map(dest => dest.ActivationCode, src => src.ActivationCode)
.Map(dest => dest.DurationMonths, src => src.DurationMonths > 0 ? src.DurationMonths : 12);
// Response mappings
config.NewConfig<GetMyClubMembershipResponseDto, ProtoDto.GetMyClubMembershipResponse>()
.Map(dest => dest.UserId, src => src.UserId)
.Map(dest => dest.PackageId, src => src.PackageId)
.Map(dest => dest.PackageName, src => src.PackageName)
.Map(dest => dest.ActivationCode, src => src.ActivationCode)
.Map(dest => dest.IsActive, src => src.IsActive)
.Map(dest => dest.ActivationDate, src => src.ActivationDate.HasValue
? Timestamp.FromDateTime(DateTime.SpecifyKind(src.ActivationDate.Value, DateTimeKind.Utc))
: null)
.Map(dest => dest.ExpirationDate, src => src.ExpirationDate.HasValue
? Timestamp.FromDateTime(DateTime.SpecifyKind(src.ExpirationDate.Value, DateTimeKind.Utc))
: null)
.Map(dest => dest.Status, src => src.Status)
.Map(dest => dest.DaysRemaining, src => src.DaysRemaining)
.Map(dest => dest.IsTrialPeriod, src => src.IsTrialPeriod);
config.NewConfig<ActivateMyClubMembershipResponseDto, ProtoDto.ActivateMyClubMembershipResponse>()
.Map(dest => dest.Success, src => src.Success)
.Map(dest => dest.Message, src => src.Message)
.Map(dest => dest.ActivationDate, src => Timestamp.FromDateTime(DateTime.SpecifyKind(src.ActivationDate, DateTimeKind.Utc)))
.Map(dest => dest.ExpirationDate, src => Timestamp.FromDateTime(DateTime.SpecifyKind(src.ExpirationDate, DateTimeKind.Utc)))
.Map(dest => dest.AmountPaid, src => src.AmountPaid);
}
}