using CMSMicroservice.Application.Common.Interfaces; using CMSMicroservice.Protobuf.Protos.ClubMembership; using CMSMicroservice.WebApi.Common.Services; using CMSMicroservice.Application.ClubMembershipCQ.Commands.ActivateClubMembership; using CMSMicroservice.Application.ClubMembershipCQ.Commands.DeactivateClubMembership; using CMSMicroservice.Application.ClubMembershipCQ.Commands.AssignClubFeature; using CMSMicroservice.Application.ClubMembershipCQ.Commands.AcceptClubMembershipContract; using CMSMicroservice.Application.ClubMembershipCQ.Queries.GetClubMembership; using CMSMicroservice.Application.ClubMembershipCQ.Queries.GetAllClubMemberships; using CMSMicroservice.Application.ClubMembershipCQ.Queries.GetClubMembershipHistory; using CMSMicroservice.Application.ClubMembershipCQ.Queries.GetClubStatistics; using CMSMicroservice.Application.ClubFeatureCQ.Queries.GetUserClubFeatures; using CMSMicroservice.Application.ClubFeatureCQ.Commands.ToggleUserClubFeature; using Microsoft.Extensions.Logging; namespace CMSMicroservice.WebApi.Services; public class ClubMembershipService : ClubMembershipContract.ClubMembershipContractBase { private readonly IDispatchRequestToCQRS _dispatchRequestToCQRS; private readonly ICurrentUserService _currentUserService; private readonly ILogger _logger; public ClubMembershipService( IDispatchRequestToCQRS dispatchRequestToCQRS, ICurrentUserService currentUserService, ILogger logger) { _dispatchRequestToCQRS = dispatchRequestToCQRS; _currentUserService = currentUserService; _logger = logger; } public override async Task ActivateClubMembership(ActivateClubMembershipRequest request, ServerCallContext context) { return await _dispatchRequestToCQRS.Handle(request, context); } public override async Task DeactivateClubMembership(DeactivateClubMembershipRequest request, ServerCallContext context) { return await _dispatchRequestToCQRS.Handle(request, context); } public override async Task AssignFeatureToMembership(AssignFeatureToMembershipRequest request, ServerCallContext context) { return await _dispatchRequestToCQRS.Handle(request, context); } public override async Task GetClubMembership(GetClubMembershipRequest request, ServerCallContext context) { // اگر UserId در request نیست یا صفر است، از JWT بخوان if (request.UserId <= 0) { if (long.TryParse(_currentUserService.UserId, out var tokenUserId) && tokenUserId > 0) { _logger.LogInformation("GetClubMembership: Reading UserId from JWT token: {UserId}", tokenUserId); request = new GetClubMembershipRequest { UserId = tokenUserId }; } else { _logger.LogWarning("GetClubMembership: No valid UserId in request or JWT token"); throw new RpcException(new Status(StatusCode.Unauthenticated, "کاربر احراز هویت نشده است")); } } else { _logger.LogInformation("GetClubMembership: Using UserId from request: {UserId}", request.UserId); } return await _dispatchRequestToCQRS.Handle(request, context); } public override async Task GetAllClubMemberships(GetAllClubMembershipsRequest request, ServerCallContext context) { return await _dispatchRequestToCQRS.Handle(request, context); } public override async Task GetClubMembershipHistory(GetClubMembershipHistoryRequest request, ServerCallContext context) { return await _dispatchRequestToCQRS.Handle(request, context); } public override async Task GetClubStatistics(GetClubStatisticsRequest request, ServerCallContext context) { return await _dispatchRequestToCQRS.Handle(request, context); } public override async Task GetUserClubFeatures(GetUserClubFeaturesRequest request, ServerCallContext context) { return await _dispatchRequestToCQRS.Handle(request, context); } public override async Task ToggleUserClubFeature(ToggleUserClubFeatureRequest request, ServerCallContext context) { return await _dispatchRequestToCQRS.Handle(request, context); } public override async Task AcceptClubMembershipContract(AcceptClubMembershipContractRequest request, ServerCallContext context) { return await _dispatchRequestToCQRS.Handle(request, context); } }