using CMSMicroservice.Protobuf.Protos.ClubMembership; using Google.Protobuf.WellKnownTypes; namespace FrontOffice.Main.Utilities; /// /// Service for Club Membership operations /// Connected to CMS gRPC ClubMembershipCQ /// public class ClubMembershipService { private readonly ClubMembershipContract.ClubMembershipContractClient _client; private readonly UserAuthInfo _authInfo; public ClubMembershipService( ClubMembershipContract.ClubMembershipContractClient client, UserAuthInfo authInfo) { _client = client; _authInfo = authInfo; } /// /// Get current user's club membership status /// Maps to: ClubMembershipCQ.GetMyClubMembership /// public async Task GetMyMembershipAsync() { try { // UserId = 0 میفرستیم تا CMS از JWT بخونه var response = await _client.GetClubMembershipAsync(new GetClubMembershipRequest { UserId = 0 }); return new ClubMembershipDto { UserId = response.UserId, IsActive = response.IsActive, Status = response.Status, DaysRemaining = response.DaysRemaining > 0 ? response.DaysRemaining : null }; } catch (Exception ex) { // Log the error for debugging Console.WriteLine($"GetMyMembershipAsync error: {ex.Message}"); // Return empty membership if backend is unavailable return new ClubMembershipDto { UserId = 0, IsActive = false, Status = string.Empty, DaysRemaining = null }; } } /// /// Activate or renew club membership /// Maps to: ClubMembershipCQ.ActivateMyClubMembership /// public async Task ActivateMembershipAsync( long packageId, string? activationCode, int durationMonths) { try { var userId = await GetCurrentUserIdAsync(); // Check if user is authenticated if (userId <= 0) { return new ClubActivationResponseDto { Success = false, Message = "کاربر احراز هویت نشده است. لطفاً ابتدا وارد شوید.", ActivationDate = null, AmountPaid = 0 }; } var request = new ActivateClubMembershipRequest { UserId = userId, PackageId = packageId, DurationMonths = durationMonths }; if (!string.IsNullOrWhiteSpace(activationCode)) { request.ActivationCode = activationCode; } await _client.ActivateClubMembershipAsync(request); // Note: CMS ActivateClubMembership returns Empty, not detailed response return new ClubActivationResponseDto { Success = true, Message = "عضویت باشگاه با موفقیت فعال شد.", ActivationDate = DateTime.Now, AmountPaid = 0 // Not available in CMS response }; } catch (Grpc.Core.RpcException ex) { return new ClubActivationResponseDto { Success = false, Message = ex.Status.Detail ?? "خطا در فعال‌سازی عضویت", ActivationDate = null, AmountPaid = 0 }; } } private Task GetCurrentUserIdAsync() { return Task.FromResult(_authInfo.UserId); } }