Merge branch 'kub-stage' into production
Build and Deploy to Production / build-and-deploy (push) Failing after 19m40s

This commit is contained in:
masoodafar-web
2026-06-26 19:30:03 +03:30
62 changed files with 2143 additions and 116 deletions
@@ -0,0 +1,47 @@
using Google.Protobuf.WellKnownTypes;
using CMSMicroservice.Domain.Enums;
using Mapster;
using AppHistory = CMSMicroservice.Application.ClubMembershipCycleHistoryCQ.Queries.GetAllClubMembershipCycleHistoryByFilter;
using ProtoHistory = CMSMicroservice.Protobuf.Protos.ClubMembershipCycleHistory;
namespace CMSMicroservice.WebApi.Common.Mappings;
public class ClubMembershipCycleHistoryProfile : IRegister
{
public void Register(TypeAdapterConfig config)
{
config.NewConfig<ProtoHistory.GetAllClubMembershipCycleHistoryByFilterRequest, AppHistory.GetAllClubMembershipCycleHistoryByFilterQuery>()
.Map(dest => dest.PaginationState, src => src.PaginationState)
.Map(dest => dest.SortBy, src => src.SortBy)
.Map(dest => dest.Filter, src => src.Filter);
config.NewConfig<ProtoHistory.GetAllClubMembershipCycleHistoryByFilterFilter, AppHistory.GetAllClubMembershipCycleHistoryByFilterFilter>()
.Map(dest => dest.UserId, src => src.UserId)
.Map(dest => dest.ClubMembershipCycleId, src => src.ClubMembershipCycleId)
.Map(dest => dest.CycleNumber, src => src.CycleNumber)
.Map(dest => dest.Action, src => src.Action == null ? null : (ClubMembershipCycleAction?)src.Action)
.Map(dest => dest.CreatedFrom, src => src.CreatedFrom != null ? src.CreatedFrom.ToDateTime() : (DateTime?)null)
.Map(dest => dest.CreatedTo, src => src.CreatedTo != null ? src.CreatedTo.ToDateTime() : (DateTime?)null);
config.NewConfig<AppHistory.GetAllClubMembershipCycleHistoryByFilterResponseDto, ProtoHistory.GetAllClubMembershipCycleHistoryByFilterResponse>()
.Map(dest => dest.MetaData, src => src.MetaData)
.Map(dest => dest.Models, src => src.Models);
config.NewConfig<AppHistory.GetAllClubMembershipCycleHistoryByFilterResponseModel, ProtoHistory.ClubMembershipCycleHistoryModel>()
.Map(dest => dest.Id, src => src.Id)
.Map(dest => dest.ClubMembershipCycleId, src => src.ClubMembershipCycleId)
.Map(dest => dest.UserId, src => src.UserId)
.Map(dest => dest.UserName, src => src.UserName)
.Map(dest => dest.CycleNumber, src => src.CycleNumber)
.Map(dest => dest.OldIsCurrentCycle, src => src.OldIsCurrentCycle)
.Map(dest => dest.NewIsCurrentCycle, src => src.NewIsCurrentCycle)
.Map(dest => dest.OldMagicStartedAt, src => src.OldMagicStartedAt)
.Map(dest => dest.NewMagicStartedAt, src => src.NewMagicStartedAt)
.Map(dest => dest.OldMagicCompletedAt, src => src.OldMagicCompletedAt)
.Map(dest => dest.NewMagicCompletedAt, src => src.NewMagicCompletedAt)
.Map(dest => dest.Action, src => (int)src.Action)
.Map(dest => dest.PerformedBy, src => src.PerformedBy ?? string.Empty)
.Map(dest => dest.Reason, src => src.Reason ?? string.Empty)
.Map(dest => dest.CreatedAt, src => Timestamp.FromDateTimeOffset(src.Created));
}
}
@@ -0,0 +1,57 @@
using Google.Protobuf.WellKnownTypes;
using CMSMicroservice.Domain.Enums;
using Mapster;
using AppCycle = CMSMicroservice.Application.ClubMembershipCycleCQ.Queries.GetAllClubMembershipCycleByFilter;
using AppCycleSummary = CMSMicroservice.Application.ClubMembershipCycleCQ.Queries.GetClubMembershipCycleSummary;
using ProtoCycle = CMSMicroservice.Protobuf.Protos.ClubMembershipCycle;
namespace CMSMicroservice.WebApi.Common.Mappings;
public class ClubMembershipCycleProfile : IRegister
{
public void Register(TypeAdapterConfig config)
{
config.NewConfig<ProtoCycle.GetAllClubMembershipCycleByFilterRequest, AppCycle.GetAllClubMembershipCycleByFilterQuery>()
.Map(dest => dest.PaginationState, src => src.PaginationState)
.Map(dest => dest.SortBy, src => src.SortBy)
.Map(dest => dest.Filter, src => src.Filter);
config.NewConfig<ProtoCycle.GetAllClubMembershipCycleByFilterFilter, AppCycle.GetAllClubMembershipCycleByFilterFilter>()
.Map(dest => dest.UserId, src => src.UserId)
.Map(dest => dest.IsCurrentCycle, src => src.IsCurrentCycle)
.Map(dest => dest.PackageId, src => src.PackageId)
.Map(dest => dest.CycleNumber, src => src.CycleNumber)
.Map(dest => dest.PurchaseMethod, src => src.PurchaseMethod == null ? null : (PackagePurchaseMethod?)src.PurchaseMethod)
.Map(dest => dest.MagicState, src => src.MagicState)
.Map(dest => dest.PackagePurchasedFrom, src => src.PackagePurchasedFrom != null ? src.PackagePurchasedFrom.ToDateTime() : (DateTime?)null)
.Map(dest => dest.PackagePurchasedTo, src => src.PackagePurchasedTo != null ? src.PackagePurchasedTo.ToDateTime() : (DateTime?)null);
config.NewConfig<AppCycle.GetAllClubMembershipCycleByFilterResponseDto, ProtoCycle.GetAllClubMembershipCycleByFilterResponse>()
.Map(dest => dest.MetaData, src => src.MetaData)
.Map(dest => dest.Models, src => src.Models);
config.NewConfig<AppCycle.GetAllClubMembershipCycleByFilterResponseModel, ProtoCycle.ClubMembershipCycleModel>()
.Map(dest => dest.Id, src => src.Id)
.Map(dest => dest.UserId, src => src.UserId)
.Map(dest => dest.UserName, src => src.UserName)
.Map(dest => dest.ClubMembershipId, src => src.ClubMembershipId)
.Map(dest => dest.CycleNumber, src => src.CycleNumber)
.Map(dest => dest.PackageId, src => src.PackageId)
.Map(dest => dest.PackageName, src => src.PackageName)
.Map(dest => dest.PackageAmount, src => src.PackageAmount)
.Map(dest => dest.PurchaseMethod, src => (int)src.PurchaseMethod)
.Map(dest => dest.PackagePurchasedAt, src => Timestamp.FromDateTime(DateTime.SpecifyKind(src.PackagePurchasedAt, DateTimeKind.Utc)))
.Map(dest => dest.MagicStartedAt, src => src.MagicStartedAt)
.Map(dest => dest.MagicCompletedAt, src => src.MagicCompletedAt)
.Map(dest => dest.IsCurrentCycle, src => src.IsCurrentCycle)
.Map(dest => dest.CreatedAt, src => Timestamp.FromDateTimeOffset(src.Created));
config.NewConfig<ProtoCycle.GetClubMembershipCycleSummaryRequest, AppCycleSummary.GetClubMembershipCycleSummaryQuery>()
.Map(dest => dest.Filter, src => src.Filter);
config.NewConfig<AppCycleSummary.GetClubMembershipCycleSummaryResponseDto, ProtoCycle.GetClubMembershipCycleSummaryResponse>()
.Map(dest => dest.TotalCount, src => src.TotalCount)
.Map(dest => dest.CurrentCycleCount, src => src.CurrentCycleCount)
.Map(dest => dest.MagicActiveCount, src => src.MagicActiveCount);
}
}
@@ -1,7 +1,9 @@
using CMSMicroservice.Application.ClubMembershipCQ.Queries.GetAllClubMemberships;
using CMSMicroservice.Application.ClubMembershipCQ.Queries.GetClubMembership;
using CMSMicroservice.Application.ClubMembershipCQ.Queries.GetClubStatistics;
using CMSMicroservice.Protobuf.Protos.ClubMembership;
using CMSMicroservice.Domain.Enums;
using AppHistory = CMSMicroservice.Application.ClubMembershipCQ.Queries.GetClubMembershipHistory;
using ProtoClub = CMSMicroservice.Protobuf.Protos.ClubMembership;
using Google.Protobuf.WellKnownTypes;
using Mapster;
using System.Linq;
@@ -17,15 +19,15 @@ public class ClubMembershipProfile : IRegister
// =====================
// GetClubMembershipRequest -> GetClubMembershipQuery
config.NewConfig<GetClubMembershipRequest, GetClubMembershipQuery>()
config.NewConfig<ProtoClub.GetClubMembershipRequest, GetClubMembershipQuery>()
.MapWith(src => new GetClubMembershipQuery
{
UserId = src.UserId
});
// ClubMembershipDto -> GetClubMembershipResponse
config.NewConfig<ClubMembershipDto, GetClubMembershipResponse>()
.MapWith(src => new GetClubMembershipResponse
config.NewConfig<ClubMembershipDto, ProtoClub.GetClubMembershipResponse>()
.MapWith(src => new ProtoClub.GetClubMembershipResponse
{
Id = src.Id,
UserId = src.UserId,
@@ -48,7 +50,7 @@ public class ClubMembershipProfile : IRegister
// =====================
// GetAllClubMembershipsRequest -> GetAllClubMembershipsQuery
config.NewConfig<GetAllClubMembershipsRequest, GetAllClubMembershipsQuery>()
config.NewConfig<ProtoClub.GetAllClubMembershipsRequest, GetAllClubMembershipsQuery>()
.MapWith(src => new GetAllClubMembershipsQuery
{
PaginationState = new Application.Common.Models.PaginationState
@@ -64,8 +66,8 @@ public class ClubMembershipProfile : IRegister
});
// GetAllClubMembershipsResponseDto -> GetAllClubMembershipsResponse
config.NewConfig<GetAllClubMembershipsResponseDto, GetAllClubMembershipsResponse>()
.MapWith(src => new GetAllClubMembershipsResponse
config.NewConfig<GetAllClubMembershipsResponseDto, ProtoClub.GetAllClubMembershipsResponse>()
.MapWith(src => new ProtoClub.GetAllClubMembershipsResponse
{
MetaData = new CMSMicroservice.Protobuf.Protos.MetaData
{
@@ -82,12 +84,12 @@ public class ClubMembershipProfile : IRegister
// =====================
// GetClubStatisticsRequest -> GetClubStatisticsQuery
config.NewConfig<GetClubStatisticsRequest, GetClubStatisticsQuery>()
config.NewConfig<ProtoClub.GetClubStatisticsRequest, GetClubStatisticsQuery>()
.MapWith(src => new GetClubStatisticsQuery());
// GetClubStatisticsResponseDto -> GetClubStatisticsResponse
config.NewConfig<GetClubStatisticsResponseDto, GetClubStatisticsResponse>()
.MapWith(src => new GetClubStatisticsResponse
config.NewConfig<GetClubStatisticsResponseDto, ProtoClub.GetClubStatisticsResponse>()
.MapWith(src => new ProtoClub.GetClubStatisticsResponse
{
TotalMembers = src.TotalMembers,
ActiveMembers = src.ActiveMembers,
@@ -97,14 +99,14 @@ public class ClubMembershipProfile : IRegister
TotalRevenue = src.TotalRevenue,
AverageMembershipDurationDays = src.AverageMembershipDurationDays,
ExpiringSoonCount = src.ExpiringSoonCount,
PackageDistribution = { src.PackageDistribution.Select(p => new PackageLevelDistribution
PackageDistribution = { src.PackageDistribution.Select(p => new ProtoClub.PackageLevelDistribution
{
PackageId = p.PackageId,
PackageName = p.PackageName ?? string.Empty,
MemberCount = p.MemberCount,
Percentage = p.Percentage
}) },
MonthlyTrend = { src.MonthlyTrend.Select(t => new MonthlyMembershipTrend
MonthlyTrend = { src.MonthlyTrend.Select(t => new ProtoClub.MonthlyMembershipTrend
{
Month = t.Month ?? string.Empty,
Activations = t.Activations,
@@ -112,24 +114,55 @@ public class ClubMembershipProfile : IRegister
NetChange = t.NetChange
}) }
});
// GetClubMembershipHistory
config.NewConfig<ProtoClub.GetClubMembershipHistoryRequest, AppHistory.GetClubMembershipHistoryQuery>()
.Map(dest => dest.PaginationState, src => src.PaginationState)
.Map(dest => dest.SortBy, src => src.SortBy)
.Map(dest => dest.Filter, src => src.Filter);
config.NewConfig<ProtoClub.GetClubMembershipHistoryFilter, AppHistory.GetClubMembershipHistoryFilter>()
.Map(dest => dest.UserId, src => src.UserId)
.Map(dest => dest.ClubMembershipId, src => src.ClubMembershipId)
.Map(dest => dest.Action, src => src.Action == null ? null : (ClubMembershipAction?)src.Action)
.Map(dest => dest.CreatedFrom, src => src.CreatedFrom != null ? src.CreatedFrom.ToDateTime() : (DateTime?)null)
.Map(dest => dest.CreatedTo, src => src.CreatedTo != null ? src.CreatedTo.ToDateTime() : (DateTime?)null);
config.NewConfig<AppHistory.GetClubMembershipHistoryResponseDto, ProtoClub.GetClubMembershipHistoryResponse>()
.Map(dest => dest.MetaData, src => src.MetaData)
.Map(dest => dest.Models, src => src.Models);
config.NewConfig<AppHistory.GetClubMembershipHistoryResponseModel, ProtoClub.ClubMembershipHistoryModel>()
.Map(dest => dest.Id, src => src.Id)
.Map(dest => dest.ClubMembershipId, src => src.ClubMembershipId)
.Map(dest => dest.UserId, src => src.UserId)
.Map(dest => dest.UserName, src => src.UserName ?? string.Empty)
.Map(dest => dest.OldIsActive, src => src.OldIsActive)
.Map(dest => dest.NewIsActive, src => src.NewIsActive)
.Map(dest => dest.OldInitialContribution, src => src.OldInitialContribution)
.Map(dest => dest.NewInitialContribution, src => src.NewInitialContribution)
.Map(dest => dest.Action, src => (int)src.Action)
.Map(dest => dest.PerformedBy, src => src.PerformedBy ?? string.Empty)
.Map(dest => dest.Reason, src => src.Reason ?? string.Empty)
.Map(dest => dest.CreatedAt, src => Timestamp.FromDateTimeOffset(src.Created));
}
private static ClubMembershipModel MapToModel(GetAllClubMembershipsResponseModel src)
private static ProtoClub.ClubMembershipModel MapToModel(GetAllClubMembershipsResponseModel src)
{
return new ClubMembershipModel
return new ProtoClub.ClubMembershipModel
{
Id = src.Id,
UserId = src.UserId,
UserName = src.UserName ?? string.Empty,
PackageId = 0, // Not available in current entity
PackageName = string.Empty, // Not available in current entity
ActivationCode = string.Empty, // Not available in current entity
PackageId = src.PackageId,
PackageName = src.PackageName ?? string.Empty,
ActivationCode = string.Empty,
ActivatedAt = src.ActivatedAt.HasValue
? Timestamp.FromDateTime(DateTime.SpecifyKind(src.ActivatedAt.Value, DateTimeKind.Utc))
: null,
ExpiresAt = null, // Not available in current entity
ExpiresAt = null,
IsActive = src.IsActive,
IsExpired = false, // Calculate based on ExpiresAt if available
IsExpired = false,
Created = Timestamp.FromDateTime(src.Created.UtcDateTime)
};
}
@@ -0,0 +1,60 @@
using Google.Protobuf.WellKnownTypes;
using CMSMicroservice.Domain.Enums;
using Mapster;
using AppPt = CMSMicroservice.Application.PaymentTransactionCQ.Queries.GetAllPaymentTransactionByFilter;
using AppPtSummary = CMSMicroservice.Application.PaymentTransactionCQ.Queries.GetPaymentTransactionSummary;
using ProtoPt = CMSMicroservice.Protobuf.Protos.PaymentTransaction;
namespace CMSMicroservice.WebApi.Common.Mappings;
public class PaymentTransactionProfile : IRegister
{
public void Register(TypeAdapterConfig config)
{
config.NewConfig<ProtoPt.GetAllPaymentTransactionByFilterRequest, AppPt.GetAllPaymentTransactionByFilterQuery>()
.Map(dest => dest.PaginationState, src => src.PaginationState)
.Map(dest => dest.SortBy, src => src.SortBy)
.Map(dest => dest.Filter, src => src.Filter);
config.NewConfig<ProtoPt.GetAllPaymentTransactionByFilterFilter, AppPt.GetAllPaymentTransactionByFilterFilter>()
.Map(dest => dest.UserId, src => src.UserId)
.Map(dest => dest.Mobile, src => src.Mobile)
.Map(dest => dest.GatewayProvider, src => src.GatewayProvider)
.Map(dest => dest.PaymentStatus, src => src.PaymentStatus)
.Map(dest => dest.Authority, src => src.Authority)
.Map(dest => dest.RefId, src => src.RefId)
.Map(dest => dest.OrderId, src => src.OrderId)
.Map(dest => dest.CreatedFrom, src => src.CreatedFrom != null ? src.CreatedFrom.ToDateTime() : (DateTime?)null)
.Map(dest => dest.CreatedTo, src => src.CreatedTo != null ? src.CreatedTo.ToDateTime() : (DateTime?)null);
config.NewConfig<AppPt.GetAllPaymentTransactionByFilterResponseDto, ProtoPt.GetAllPaymentTransactionByFilterResponse>()
.Map(dest => dest.MetaData, src => src.MetaData)
.Map(dest => dest.Models, src => src.Models);
config.NewConfig<AppPt.GetAllPaymentTransactionByFilterResponseModel, ProtoPt.PaymentTransactionModel>()
.Map(dest => dest.Id, src => src.Id)
.Map(dest => dest.UserId, src => src.UserId ?? 0)
.Map(dest => dest.Mobile, src => src.Mobile ?? string.Empty)
.Map(dest => dest.GatewayProvider, src => src.GatewayProvider)
.Map(dest => dest.Amount, src => src.Amount)
.Map(dest => dest.Authority, src => src.Authority ?? string.Empty)
.Map(dest => dest.PaymentStatus, src => src.PaymentStatus)
.Map(dest => dest.VerificationStatusCode, src => src.VerificationStatusCode)
.Map(dest => dest.VerificationStatusMessage, src => src.VerificationStatusMessage ?? string.Empty)
.Map(dest => dest.RefId, src => src.RefId ?? string.Empty)
.Map(dest => dest.CardPan, src => src.CardPan ?? string.Empty)
.Map(dest => dest.OrderId, src => src.OrderId ?? string.Empty)
.Map(dest => dest.TransactionId, src => src.TransactionId)
.Map(dest => dest.Description, src => src.Description ?? string.Empty)
.Map(dest => dest.CreatedAt, src => Timestamp.FromDateTimeOffset(src.Created));
config.NewConfig<ProtoPt.GetPaymentTransactionSummaryRequest, AppPtSummary.GetPaymentTransactionSummaryQuery>()
.Map(dest => dest.Filter, src => src.Filter);
config.NewConfig<AppPtSummary.GetPaymentTransactionSummaryResponseDto, ProtoPt.GetPaymentTransactionSummaryResponse>()
.Map(dest => dest.TotalCount, src => src.TotalCount)
.Map(dest => dest.TotalAmount, src => src.TotalAmount)
.Map(dest => dest.SuccessfulCount, src => src.SuccessfulCount)
.Map(dest => dest.PendingCount, src => src.PendingCount);
}
}
@@ -1,11 +1,55 @@
using Google.Protobuf.WellKnownTypes;
using Mapster;
using AppTx = CMSMicroservice.Application.TransactionsCQ.Queries.GetAllTransactionsByFilter;
using AppTxSummary = CMSMicroservice.Application.TransactionsCQ.Queries.GetTransactionSummary;
using ProtoTx = CMSMicroservice.Protobuf.Protos.Transactions;
namespace CMSMicroservice.WebApi.Common.Mappings;
public class TransactionsProfile : IRegister
{
void IRegister.Register(TypeAdapterConfig config)
{
config.NewConfig<Protobuf.Protos.Transactions.GetAllTransactionsByFilterRequest, Application.TransactionsCQ.Queries.GetAllTransactionsByFilter.GetAllTransactionsByFilterQuery>()
.IgnoreIf((src, dest) => !src.Filter.HasPaymentStatus, dest => dest.Filter.PaymentStatus)
.IgnoreIf((src, dest) => !src.Filter.HasType, dest => dest.Filter.Type);
public void Register(TypeAdapterConfig config)
{
config.NewConfig<ProtoTx.GetAllTransactionsByFilterRequest, AppTx.GetAllTransactionsByFilterQuery>()
.Map(dest => dest.PaginationState, src => src.PaginationState)
.Map(dest => dest.SortBy, src => src.SortBy)
.Map(dest => dest.Filter, src => src.Filter);
config.NewConfig<ProtoTx.GetAllTransactionsByFilterFilter, AppTx.GetAllTransactionsByFilterFilter>()
.Map(dest => dest.Id, src => src.Id)
.Map(dest => dest.Amount, src => src.Amount)
.Map(dest => dest.Description, src => src.Description)
.Map(dest => dest.PaymentStatus, src => src.HasPaymentStatus ? (Domain.Enums.PaymentStatus?)src.PaymentStatus : null)
.Map(dest => dest.PaymentDate, src => src.PaymentDate != null ? src.PaymentDate.ToDateTime() : (DateTime?)null)
.Map(dest => dest.RefId, src => src.RefId)
.Map(dest => dest.Type, src => src.HasType ? (Domain.Enums.TransactionType?)src.Type : null)
.Map(dest => dest.CreatedFrom, src => src.CreatedFrom != null ? src.CreatedFrom.ToDateTime() : (DateTime?)null)
.Map(dest => dest.CreatedTo, src => src.CreatedTo != null ? src.CreatedTo.ToDateTime() : (DateTime?)null)
.Map(dest => dest.PaymentDateFrom, src => src.PaymentDateFrom != null ? src.PaymentDateFrom.ToDateTime() : (DateTime?)null)
.Map(dest => dest.PaymentDateTo, src => src.PaymentDateTo != null ? src.PaymentDateTo.ToDateTime() : (DateTime?)null);
config.NewConfig<AppTx.GetAllTransactionsByFilterResponseDto, ProtoTx.GetAllTransactionsByFilterResponse>()
.Map(dest => dest.MetaData, src => src.MetaData)
.Map(dest => dest.Models, src => src.Models);
config.NewConfig<AppTx.GetAllTransactionsByFilterResponseModel, ProtoTx.GetAllTransactionsByFilterResponseModel>()
.Map(dest => dest.Id, src => src.Id)
.Map(dest => dest.Amount, src => src.Amount)
.Map(dest => dest.Description, src => src.Description)
.Map(dest => dest.PaymentStatus, src => src.PaymentStatus)
.Map(dest => dest.PaymentDate, src => src.PaymentDate.HasValue ? Timestamp.FromDateTime(DateTime.SpecifyKind(src.PaymentDate.Value, DateTimeKind.Utc)) : null)
.Map(dest => dest.RefId, src => src.RefId)
.Map(dest => dest.Type, src => src.Type)
.Map(dest => dest.Created, src => Timestamp.FromDateTime(DateTime.SpecifyKind(src.Created, DateTimeKind.Utc)));
config.NewConfig<ProtoTx.GetTransactionSummaryRequest, AppTxSummary.GetTransactionSummaryQuery>()
.Map(dest => dest.Filter, src => src.Filter);
config.NewConfig<AppTxSummary.GetTransactionSummaryResponseDto, ProtoTx.GetTransactionSummaryResponse>()
.Map(dest => dest.TotalCount, src => src.TotalCount)
.Map(dest => dest.TotalAmount, src => src.TotalAmount)
.Map(dest => dest.SuccessCount, src => src.SuccessCount)
.Map(dest => dest.PendingCount, src => src.PendingCount)
.Map(dest => dest.RejectCount, src => src.RejectCount);
}
}
@@ -0,0 +1,53 @@
using Google.Protobuf.WellKnownTypes;
using CMSMicroservice.Domain.Enums;
using Mapster;
using AppUp = CMSMicroservice.Application.UserPackagePurchaseCQ.Queries.GetAllUserPackagePurchaseByFilter;
using AppUpSummary = CMSMicroservice.Application.UserPackagePurchaseCQ.Queries.GetUserPackagePurchaseSummary;
using ProtoUp = CMSMicroservice.Protobuf.Protos.UserPackagePurchase;
namespace CMSMicroservice.WebApi.Common.Mappings;
public class UserPackagePurchaseProfile : IRegister
{
public void Register(TypeAdapterConfig config)
{
config.NewConfig<ProtoUp.GetAllUserPackagePurchaseByFilterRequest, AppUp.GetAllUserPackagePurchaseByFilterQuery>()
.Map(dest => dest.PaginationState, src => src.PaginationState)
.Map(dest => dest.SortBy, src => src.SortBy)
.Map(dest => dest.Filter, src => src.Filter);
config.NewConfig<ProtoUp.GetAllUserPackagePurchaseByFilterFilter, AppUp.GetAllUserPackagePurchaseByFilterFilter>()
.Map(dest => dest.UserId, src => src.UserId)
.Map(dest => dest.PackageId, src => src.PackageId)
.Map(dest => dest.PurchaseMethod, src => src.PurchaseMethod == null ? null : (PackagePurchaseMethod?)src.PurchaseMethod)
.Map(dest => dest.PurchasedFrom, src => src.PurchasedFrom != null ? src.PurchasedFrom.ToDateTime() : (DateTime?)null)
.Map(dest => dest.PurchasedTo, src => src.PurchasedTo != null ? src.PurchasedTo.ToDateTime() : (DateTime?)null)
.Map(dest => dest.MinAmount, src => src.MinAmount)
.Map(dest => dest.MaxAmount, src => src.MaxAmount);
config.NewConfig<AppUp.GetAllUserPackagePurchaseByFilterResponseDto, ProtoUp.GetAllUserPackagePurchaseByFilterResponse>()
.Map(dest => dest.MetaData, src => src.MetaData)
.Map(dest => dest.Models, src => src.Models);
config.NewConfig<AppUp.GetAllUserPackagePurchaseByFilterResponseModel, ProtoUp.UserPackagePurchaseModel>()
.Map(dest => dest.Id, src => src.Id)
.Map(dest => dest.UserId, src => src.UserId)
.Map(dest => dest.UserName, src => src.UserName)
.Map(dest => dest.UserMobile, src => src.UserMobile)
.Map(dest => dest.PackageId, src => src.PackageId)
.Map(dest => dest.PackageName, src => src.PackageName)
.Map(dest => dest.PurchaseMethod, src => (int)src.PurchaseMethod)
.Map(dest => dest.PurchasedAt, src => Timestamp.FromDateTime(DateTime.SpecifyKind(src.PurchasedAt, DateTimeKind.Utc)))
.Map(dest => dest.Amount, src => src.Amount)
.Map(dest => dest.OrderId, src => src.OrderId)
.Map(dest => dest.TransactionId, src => src.TransactionId)
.Map(dest => dest.CreatedAt, src => Timestamp.FromDateTimeOffset(src.Created));
config.NewConfig<ProtoUp.GetUserPackagePurchaseSummaryRequest, AppUpSummary.GetUserPackagePurchaseSummaryQuery>()
.Map(dest => dest.Filter, src => src.Filter);
config.NewConfig<AppUpSummary.GetUserPackagePurchaseSummaryResponseDto, ProtoUp.GetUserPackagePurchaseSummaryResponse>()
.Map(dest => dest.TotalCount, src => src.TotalCount)
.Map(dest => dest.TotalAmount, src => src.TotalAmount);
}
}
@@ -0,0 +1,16 @@
using CMSMicroservice.Protobuf.Protos.ClubMembershipCycleHistory;
using CMSMicroservice.WebApi.Common.Services;
using CMSMicroservice.Application.ClubMembershipCycleHistoryCQ.Queries.GetAllClubMembershipCycleHistoryByFilter;
namespace CMSMicroservice.WebApi.Services;
public class ClubMembershipCycleHistoryService : ClubMembershipCycleHistoryContract.ClubMembershipCycleHistoryContractBase
{
private readonly IDispatchRequestToCQRS _dispatch;
public ClubMembershipCycleHistoryService(IDispatchRequestToCQRS dispatch) => _dispatch = dispatch;
public override Task<GetAllClubMembershipCycleHistoryByFilterResponse> GetAllClubMembershipCycleHistoryByFilter(
GetAllClubMembershipCycleHistoryByFilterRequest request, ServerCallContext context) =>
_dispatch.Handle<GetAllClubMembershipCycleHistoryByFilterRequest, GetAllClubMembershipCycleHistoryByFilterQuery, GetAllClubMembershipCycleHistoryByFilterResponse>(request, context);
}
@@ -0,0 +1,21 @@
using CMSMicroservice.Protobuf.Protos.ClubMembershipCycle;
using CMSMicroservice.WebApi.Common.Services;
using CMSMicroservice.Application.ClubMembershipCycleCQ.Queries.GetAllClubMembershipCycleByFilter;
using CMSMicroservice.Application.ClubMembershipCycleCQ.Queries.GetClubMembershipCycleSummary;
namespace CMSMicroservice.WebApi.Services;
public class ClubMembershipCycleService : ClubMembershipCycleContract.ClubMembershipCycleContractBase
{
private readonly IDispatchRequestToCQRS _dispatch;
public ClubMembershipCycleService(IDispatchRequestToCQRS dispatch) => _dispatch = dispatch;
public override Task<GetAllClubMembershipCycleByFilterResponse> GetAllClubMembershipCycleByFilter(
GetAllClubMembershipCycleByFilterRequest request, ServerCallContext context) =>
_dispatch.Handle<GetAllClubMembershipCycleByFilterRequest, GetAllClubMembershipCycleByFilterQuery, GetAllClubMembershipCycleByFilterResponse>(request, context);
public override Task<GetClubMembershipCycleSummaryResponse> GetClubMembershipCycleSummary(
GetClubMembershipCycleSummaryRequest request, ServerCallContext context) =>
_dispatch.Handle<GetClubMembershipCycleSummaryRequest, GetClubMembershipCycleSummaryQuery, GetClubMembershipCycleSummaryResponse>(request, context);
}
@@ -0,0 +1,21 @@
using CMSMicroservice.Protobuf.Protos.PaymentTransaction;
using CMSMicroservice.WebApi.Common.Services;
using CMSMicroservice.Application.PaymentTransactionCQ.Queries.GetAllPaymentTransactionByFilter;
using CMSMicroservice.Application.PaymentTransactionCQ.Queries.GetPaymentTransactionSummary;
namespace CMSMicroservice.WebApi.Services;
public class PaymentTransactionService : PaymentTransactionContract.PaymentTransactionContractBase
{
private readonly IDispatchRequestToCQRS _dispatch;
public PaymentTransactionService(IDispatchRequestToCQRS dispatch) => _dispatch = dispatch;
public override Task<GetAllPaymentTransactionByFilterResponse> GetAllPaymentTransactionByFilter(
GetAllPaymentTransactionByFilterRequest request, ServerCallContext context) =>
_dispatch.Handle<GetAllPaymentTransactionByFilterRequest, GetAllPaymentTransactionByFilterQuery, GetAllPaymentTransactionByFilterResponse>(request, context);
public override Task<GetPaymentTransactionSummaryResponse> GetPaymentTransactionSummary(
GetPaymentTransactionSummaryRequest request, ServerCallContext context) =>
_dispatch.Handle<GetPaymentTransactionSummaryRequest, GetPaymentTransactionSummaryQuery, GetPaymentTransactionSummaryResponse>(request, context);
}
@@ -5,6 +5,7 @@ using CMSMicroservice.Application.TransactionsCQ.Commands.UpdateTransactions;
using CMSMicroservice.Application.TransactionsCQ.Commands.DeleteTransactions;
using CMSMicroservice.Application.TransactionsCQ.Queries.GetTransactions;
using CMSMicroservice.Application.TransactionsCQ.Queries.GetAllTransactionsByFilter;
using CMSMicroservice.Application.TransactionsCQ.Queries.GetTransactionSummary;
using CMSMicroservice.Application.TransactionsCQ.Commands.VerifyTransaction;
using CMSMicroservice.Application.TransactionsCQ.Commands.RefundTransaction;
using CMSMicroservice.Application.TransactionsCQ.Queries.GetCustomerTransaction;
@@ -69,6 +70,10 @@ public class TransactionsService : TransactionsContract.TransactionsContractBase
{
return await _dispatchRequestToCQRS.Handle<GetAllTransactionsByFilterRequest, GetAllTransactionsByFilterQuery, GetAllTransactionsByFilterResponse>(request, context);
}
public override Task<GetTransactionSummaryResponse> GetTransactionSummary(
GetTransactionSummaryRequest request, ServerCallContext context) =>
_dispatchRequestToCQRS.Handle<GetTransactionSummaryRequest, GetTransactionSummaryQuery, GetTransactionSummaryResponse>(request, context);
public override async Task<VerifyTransactionResponse> VerifyTransaction(VerifyTransactionRequest request, ServerCallContext context)
{
@@ -0,0 +1,21 @@
using CMSMicroservice.Protobuf.Protos.UserPackagePurchase;
using CMSMicroservice.WebApi.Common.Services;
using CMSMicroservice.Application.UserPackagePurchaseCQ.Queries.GetAllUserPackagePurchaseByFilter;
using CMSMicroservice.Application.UserPackagePurchaseCQ.Queries.GetUserPackagePurchaseSummary;
namespace CMSMicroservice.WebApi.Services;
public class UserPackagePurchaseService : UserPackagePurchaseContract.UserPackagePurchaseContractBase
{
private readonly IDispatchRequestToCQRS _dispatch;
public UserPackagePurchaseService(IDispatchRequestToCQRS dispatch) => _dispatch = dispatch;
public override Task<GetAllUserPackagePurchaseByFilterResponse> GetAllUserPackagePurchaseByFilter(
GetAllUserPackagePurchaseByFilterRequest request, ServerCallContext context) =>
_dispatch.Handle<GetAllUserPackagePurchaseByFilterRequest, GetAllUserPackagePurchaseByFilterQuery, GetAllUserPackagePurchaseByFilterResponse>(request, context);
public override Task<GetUserPackagePurchaseSummaryResponse> GetUserPackagePurchaseSummary(
GetUserPackagePurchaseSummaryRequest request, ServerCallContext context) =>
_dispatch.Handle<GetUserPackagePurchaseSummaryRequest, GetUserPackagePurchaseSummaryQuery, GetUserPackagePurchaseSummaryResponse>(request, context);
}
@@ -5,8 +5,10 @@ using CMSMicroservice.Application.UserWalletCQ.Commands.UpdateUserWallet;
using CMSMicroservice.Application.UserWalletCQ.Commands.DeleteUserWallet;
using CMSMicroservice.Application.WalletCQ.Commands.ChargeMagicWallet;
using CMSMicroservice.Application.WalletCQ.Commands.ChargeDiscountWallet;
using CMSMicroservice.Application.WalletCQ.Commands.ChargeCreditWallet;
using CMSMicroservice.Application.WalletCQ.Commands.VerifyMagicWalletCharge;
using CMSMicroservice.Application.WalletCQ.Commands.VerifyDiscountWalletCharge;
using CMSMicroservice.Application.WalletCQ.Commands.VerifyCreditWalletCharge;
using CMSMicroservice.Application.UserWalletCQ.Queries.GetUserWallet;
using CMSMicroservice.Application.UserWalletCQ.Queries.GetAllUserWalletByFilter;
using CMSMicroservice.Application.UserWalletCQ.Queries.GetCustomerWalletHistory;
@@ -242,6 +244,38 @@ public class UserWalletService : UserWalletContract.UserWalletContractBase
}
}
// ============= Credit (Main) Wallet Methods =============
public override async Task<InitiateCreditChargeResponse> InitiateCreditCharge(
InitiateCreditChargeRequest request, ServerCallContext context)
{
var userId = GetCurrentUserId();
try
{
var result = await _sender.Send(new ChargeCreditWalletCommand
{
UserId = userId,
Amount = request.Amount
}, context.CancellationToken);
return new InitiateCreditChargeResponse
{
IsSuccess = result.IsSuccess,
GatewayUrl = result.GatewayUrl ?? "",
ErrorMessage = result.ErrorMessage ?? ""
};
}
catch (PaymentInProgressException ex)
{
return new InitiateCreditChargeResponse
{
IsSuccess = false,
ErrorMessage = ex.Message
};
}
}
// ============= Wallet Verify Methods =============
public override async Task<VerifyWalletChargeResponse> VerifyMagicCharge(
@@ -330,6 +364,57 @@ public class UserWalletService : UserWalletContract.UserWalletContractBase
}
}
public override async Task<VerifyWalletChargeResponse> VerifyCreditCharge(
VerifyWalletChargeRequest request, ServerCallContext context)
{
_logger.LogInformation("VerifyCreditCharge called: Authority={Authority}, Status={Status}",
request.Authority, request.Status);
try
{
if (string.IsNullOrEmpty(request.Authority))
return new VerifyWalletChargeResponse { Success = false, Message = "کد Authority نامعتبر است" };
var paymentTx = await _context.PaymentTransactions
.FirstOrDefaultAsync(pt => pt.Authority == request.Authority, context.CancellationToken);
if (paymentTx == null || !paymentTx.UserId.HasValue)
{
_logger.LogError("VerifyCreditCharge: PaymentTransaction not found for Authority={Authority}", request.Authority);
return new VerifyWalletChargeResponse { Success = false, Message = "تراکنش یافت نشد" };
}
if (!string.Equals(request.Status, "OK", StringComparison.OrdinalIgnoreCase))
{
_logger.LogWarning("VerifyCreditCharge: Payment cancelled by user. Authority={Authority}", request.Authority);
return new VerifyWalletChargeResponse { Success = false, Message = "پرداخت توسط کاربر لغو شد" };
}
var result = await _sender.Send(new VerifyCreditWalletChargeCommand
{
UserId = paymentTx.UserId.Value,
Amount = paymentTx.Amount,
Authority = request.Authority
}, context.CancellationToken);
_logger.LogInformation("VerifyCreditCharge result: {Result}, Authority={Authority}, UserId={UserId}",
result, request.Authority, paymentTx.UserId.Value);
return new VerifyWalletChargeResponse
{
Success = result,
Message = result
? "شارژ کیف پول اصلی با موفقیت انجام شد"
: "شارژ کیف پول اصلی ناموفق بود"
};
}
catch (Exception ex)
{
_logger.LogError(ex, "VerifyCreditCharge error: Authority={Authority}", request.Authority);
return new VerifyWalletChargeResponse { Success = false, Message = ex.Message };
}
}
public override async Task<GetMagicWalletStatusResponse> GetMagicWalletStatus(
Google.Protobuf.WellKnownTypes.Empty request, ServerCallContext context)
{