using BackOffice.BFF.Application.Common.Interfaces; using MediatR; using Microsoft.Extensions.Logging; using BffPackage = BackOffice.BFF.Package.Protobuf.Protos.Package; using CmsPackage = CMSMicroservice.Protobuf.Protos.Package; namespace BackOffice.BFF.Application.PackageCQ.Queries.GetUserPackageStatus; public class GetUserPackageStatusQueryHandler : IRequestHandler { private readonly IApplicationContractContext _context; private readonly ILogger _logger; public GetUserPackageStatusQueryHandler( IApplicationContractContext context, ILogger logger) { _context = context; _logger = logger; } public async Task Handle(GetUserPackageStatusQuery request, CancellationToken cancellationToken) { var grpcRequest = new CmsPackage.GetUserPackageStatusRequest { UserId = request.UserId }; var response = await _context.Packages.GetUserPackageStatusAsync(grpcRequest, cancellationToken: cancellationToken); _logger.LogInformation("Retrieved package status for user {UserId}", request.UserId); var result = new BffPackage.GetUserPackageStatusResponse { UserId = response.UserId, PackagePurchaseMethod = response.PackagePurchaseMethod, HasPurchasedPackage = response.HasPurchasedPackage, IsClubMemberActive = response.IsClubMemberActive, WalletBalance = response.WalletBalance, DiscountBalance = response.DiscountBalance, CanActivateClubMembership = response.CanActivateClubMembership }; if (response.LastOrderNumber != null) { result.LastOrderNumber = response.LastOrderNumber; } if (response.LastPurchaseDate != null) { result.LastPurchaseDate = response.LastPurchaseDate; } return result; } }