feat(club-membership): enhance club membership history queries and responses
Build and Deploy to Kubernetes / build-and-deploy (push) Failing after 17m54s

- Added filtering capabilities to GetClubMembershipHistoryQuery, allowing optional filters for UserId, ClubMembershipId, Action, and date range.
- Updated GetClubMembershipHistoryQueryHandler to utilize the new filter structure.
- Enhanced GetAllClubMembershipsQueryHandler to include LastPackage details in the response.
- Introduced new properties in GetAllClubMembershipsResponseModel for PackageId and PackageName.
- Updated Protobuf definitions to reflect changes in club membership history queries and responses.
- Refactored mapping configurations to accommodate new DTOs and filters.
This commit is contained in:
masoodafar-web
2026-06-22 22:19:44 +03:30
parent 6395f63ab5
commit f8794bbb63
41 changed files with 1590 additions and 74 deletions
@@ -0,0 +1,92 @@
using CMSMicroservice.Application.ClubMembershipCycleCQ.Queries.GetAllClubMembershipCycleByFilter;
using CMSMicroservice.Application.ClubMembershipCycleCQ.Queries.GetClubMembershipCycleSummary;
using CMSMicroservice.Protobuf.Protos.ClubMembershipCycle;
using Google.Protobuf.WellKnownTypes;
using Mapster;
namespace CMSMicroservice.WebApi.Common.Mappings;
public class ClubMembershipCycleProfile : IRegister
{
public void Register(TypeAdapterConfig config)
{
config.NewConfig<GetAllClubMembershipCycleByFilterRequest, GetAllClubMembershipCycleByFilterQuery>()
.MapWith(src => new GetAllClubMembershipCycleByFilterQuery
{
PaginationState = MapPagination(src.PaginationState),
SortBy = src.HasSortBy ? src.SortBy : null,
Filter = MapFilter(src.Filter)
});
config.NewConfig<GetAllClubMembershipCycleByFilterResponseDto, GetAllClubMembershipCycleByFilterResponse>()
.MapWith(src => new GetAllClubMembershipCycleByFilterResponse
{
MetaData = MapMeta(src.MetaData),
Models = { src.Models?.Select(MapModel) ?? [] }
});
config.NewConfig<GetClubMembershipCycleSummaryRequest, GetClubMembershipCycleSummaryQuery>()
.MapWith(src => new GetClubMembershipCycleSummaryQuery { Filter = MapFilter(src.Filter) });
config.NewConfig<GetClubMembershipCycleSummaryResponseDto, GetClubMembershipCycleSummaryResponse>()
.MapWith(src => new GetClubMembershipCycleSummaryResponse
{
TotalCount = src.TotalCount,
CurrentCycleCount = src.CurrentCycleCount,
MagicActiveCount = src.MagicActiveCount
});
}
private static GetAllClubMembershipCycleByFilterFilter? MapFilter(GetAllClubMembershipCycleByFilterFilter? src)
{
if (src == null) return null;
return new GetAllClubMembershipCycleByFilterFilter
{
UserId = src.HasUserId ? src.UserId : null,
IsCurrentCycle = src.HasIsCurrentCycle ? src.IsCurrentCycle : null,
PackageId = src.HasPackageId ? src.PackageId : null,
CycleNumber = src.HasCycleNumber ? src.CycleNumber : null,
PurchaseMethod = src.HasPurchaseMethod ? (Domain.Enums.PackagePurchaseMethod)src.PurchaseMethod : null,
MagicState = src.HasMagicState ? src.MagicState : null,
PackagePurchasedFrom = src.PackagePurchasedFrom?.ToDateTime(),
PackagePurchasedTo = src.PackagePurchasedTo?.ToDateTime()
};
}
private static ClubMembershipCycleModel MapModel(GetAllClubMembershipCycleByFilterResponseModel m) =>
new()
{
Id = m.Id,
UserId = m.UserId,
UserName = m.UserName,
ClubMembershipId = m.ClubMembershipId,
CycleNumber = m.CycleNumber,
PackageId = m.PackageId,
PackageName = m.PackageName,
PackageAmount = m.PackageAmount,
PurchaseMethod = (int)m.PurchaseMethod,
PackagePurchasedAt = Timestamp.FromDateTime(DateTime.SpecifyKind(m.PackagePurchasedAt, DateTimeKind.Utc)),
MagicStartedAt = m.MagicStartedAt.HasValue
? Timestamp.FromDateTime(DateTime.SpecifyKind(m.MagicStartedAt.Value, DateTimeKind.Utc)) : null,
MagicCompletedAt = m.MagicCompletedAt.HasValue
? Timestamp.FromDateTime(DateTime.SpecifyKind(m.MagicCompletedAt.Value, DateTimeKind.Utc)) : null,
IsCurrentCycle = m.IsCurrentCycle,
CreatedAt = Timestamp.FromDateTimeOffset(m.Created)
};
private static Application.Common.Models.PaginationState? MapPagination(CMSMicroservice.Protobuf.Protos.PaginationState? ps) =>
ps == null ? null : new Application.Common.Models.PaginationState
{
PageNumber = ps.PageNumber > 0 ? ps.PageNumber : 1,
PageSize = ps.PageSize > 0 ? ps.PageSize : 20
};
private static CMSMicroservice.Protobuf.Protos.MetaData MapMeta(Application.Common.Models.MetaData meta) =>
new()
{
CurrentPage = meta.CurrentPage,
PageSize = meta.PageSize,
TotalCount = meta.TotalCount,
TotalPage = meta.TotalPage
};
}