diff --git a/src/CMSMicroservice.Application/PackageCQ/Commands/CreateNewPackage/CreateNewPackageCommand.cs b/src/CMSMicroservice.Application/PackageCQ/Commands/CreateNewPackage/CreateNewPackageCommand.cs index c0fd523..e54995f 100644 --- a/src/CMSMicroservice.Application/PackageCQ/Commands/CreateNewPackage/CreateNewPackageCommand.cs +++ b/src/CMSMicroservice.Application/PackageCQ/Commands/CreateNewPackage/CreateNewPackageCommand.cs @@ -22,4 +22,5 @@ public record CreateNewPackageCommand : IRequest public int MaxNetworkLevel { get; init; } = 15; public long MagicWalletMaxDeposit { get; init; } = 1_000_000_000; public long MagicWalletMaxCredit { get; init; } = 2_500_000_000; + public List FeatureIds { get; init; } = new(); } \ No newline at end of file diff --git a/src/CMSMicroservice.Application/PackageCQ/Commands/CreateNewPackage/CreateNewPackageCommandHandler.cs b/src/CMSMicroservice.Application/PackageCQ/Commands/CreateNewPackage/CreateNewPackageCommandHandler.cs index 6ac4da7..290d60f 100644 --- a/src/CMSMicroservice.Application/PackageCQ/Commands/CreateNewPackage/CreateNewPackageCommandHandler.cs +++ b/src/CMSMicroservice.Application/PackageCQ/Commands/CreateNewPackage/CreateNewPackageCommandHandler.cs @@ -16,6 +16,22 @@ public class CreateNewPackageCommandHandler : IRequestHandler(); } } diff --git a/src/CMSMicroservice.Application/PackageCQ/Commands/UpdatePackage/UpdatePackageCommand.cs b/src/CMSMicroservice.Application/PackageCQ/Commands/UpdatePackage/UpdatePackageCommand.cs index 0c2da24..5e57ded 100644 --- a/src/CMSMicroservice.Application/PackageCQ/Commands/UpdatePackage/UpdatePackageCommand.cs +++ b/src/CMSMicroservice.Application/PackageCQ/Commands/UpdatePackage/UpdatePackageCommand.cs @@ -24,4 +24,5 @@ public record UpdatePackageCommand : IRequest public int MaxNetworkLevel { get; init; } public long MagicWalletMaxDeposit { get; init; } public long MagicWalletMaxCredit { get; init; } + public List FeatureIds { get; init; } = new(); } \ No newline at end of file diff --git a/src/CMSMicroservice.Application/PackageCQ/Commands/UpdatePackage/UpdatePackageCommandHandler.cs b/src/CMSMicroservice.Application/PackageCQ/Commands/UpdatePackage/UpdatePackageCommandHandler.cs index 417f29b..2a8035c 100644 --- a/src/CMSMicroservice.Application/PackageCQ/Commands/UpdatePackage/UpdatePackageCommandHandler.cs +++ b/src/CMSMicroservice.Application/PackageCQ/Commands/UpdatePackage/UpdatePackageCommandHandler.cs @@ -16,6 +16,23 @@ public class UpdatePackageCommandHandler : IRequestHandler pf.PackageId == request.Id) + .ToListAsync(cancellationToken); + _context.PackageFeatures.RemoveRange(existingFeatures); + + foreach (var featureId in request.FeatureIds) + { + _context.PackageFeatures.Add(new PackageFeature + { + PackageId = request.Id, + ClubFeatureId = featureId, + IsIncluded = true + }); + } + await _context.SaveChangesAsync(cancellationToken); return Unit.Value; } diff --git a/src/CMSMicroservice.Application/PackageCQ/Queries/GetAllPackageByFilter/GetAllPackageByFilterQueryHandler.cs b/src/CMSMicroservice.Application/PackageCQ/Queries/GetAllPackageByFilter/GetAllPackageByFilterQueryHandler.cs index 93fe78a..193b602 100644 --- a/src/CMSMicroservice.Application/PackageCQ/Queries/GetAllPackageByFilter/GetAllPackageByFilterQueryHandler.cs +++ b/src/CMSMicroservice.Application/PackageCQ/Queries/GetAllPackageByFilter/GetAllPackageByFilterQueryHandler.cs @@ -14,6 +14,7 @@ public class GetAllPackageByFilterQueryHandler : IRequestHandler !x.IsDeleted) .ApplyOrder(sortBy: request.SortBy) .AsNoTracking() + .Include(x => x.PackageFeatures) .AsQueryable(); if (request.Filter is not null) { @@ -25,11 +26,24 @@ public class GetAllPackageByFilterQueryHandler : IRequestHandler request.Filter.Price == null || x.Price == request.Filter.Price) ; } + var packages = await query + .PaginatedListAsync(paginationState: request.PaginationState) + .ToListAsync(cancellationToken); + + var models = packages.Select(p => + { + var model = p.Adapt(); + model.FeatureIds = p.PackageFeatures? + .Where(pf => pf.IsIncluded) + .Select(pf => pf.ClubFeatureId) + .ToList() ?? new(); + return model; + }).ToList(); + return new GetAllPackageByFilterResponseDto { MetaData = await query.GetMetaData(request.PaginationState, cancellationToken), - Models = await query.PaginatedListAsync(paginationState: request.PaginationState) - .ProjectToType().ToListAsync(cancellationToken) + Models = models }; } } diff --git a/src/CMSMicroservice.Application/PackageCQ/Queries/GetAllPackageByFilter/GetAllPackageByFilterResponseDto.cs b/src/CMSMicroservice.Application/PackageCQ/Queries/GetAllPackageByFilter/GetAllPackageByFilterResponseDto.cs index 76eb16d..35ac204 100644 --- a/src/CMSMicroservice.Application/PackageCQ/Queries/GetAllPackageByFilter/GetAllPackageByFilterResponseDto.cs +++ b/src/CMSMicroservice.Application/PackageCQ/Queries/GetAllPackageByFilter/GetAllPackageByFilterResponseDto.cs @@ -31,4 +31,5 @@ public class GetAllPackageByFilterResponseDto public int MaxNetworkLevel { get; set; } public long MagicWalletMaxDeposit { get; set; } public long MagicWalletMaxCredit { get; set; } + public List FeatureIds { get; set; } = new(); } diff --git a/src/CMSMicroservice.Application/PackageCQ/Queries/GetPackage/GetPackageQueryHandler.cs b/src/CMSMicroservice.Application/PackageCQ/Queries/GetPackage/GetPackageQueryHandler.cs index 0a86195..91d230a 100644 --- a/src/CMSMicroservice.Application/PackageCQ/Queries/GetPackage/GetPackageQueryHandler.cs +++ b/src/CMSMicroservice.Application/PackageCQ/Queries/GetPackage/GetPackageQueryHandler.cs @@ -11,12 +11,19 @@ public class GetPackageQueryHandler : IRequestHandler Handle(GetPackageQuery request, CancellationToken cancellationToken) { - var response = await _context.Packages + var package = await _context.Packages .AsNoTracking() + .Include(x => x.PackageFeatures) .Where(x => x.Id == request.Id) - .ProjectToType() - .FirstOrDefaultAsync(cancellationToken); + .FirstOrDefaultAsync(cancellationToken) + ?? throw new NotFoundException(nameof(Package), request.Id); - return response ?? throw new NotFoundException(nameof(Package), request.Id); + var response = package.Adapt(); + response.FeatureIds = package.PackageFeatures? + .Where(pf => pf.IsIncluded) + .Select(pf => pf.ClubFeatureId) + .ToList() ?? new(); + + return response; } } diff --git a/src/CMSMicroservice.Application/PackageCQ/Queries/GetPackage/GetPackageResponseDto.cs b/src/CMSMicroservice.Application/PackageCQ/Queries/GetPackage/GetPackageResponseDto.cs index ec118f5..de06fd9 100644 --- a/src/CMSMicroservice.Application/PackageCQ/Queries/GetPackage/GetPackageResponseDto.cs +++ b/src/CMSMicroservice.Application/PackageCQ/Queries/GetPackage/GetPackageResponseDto.cs @@ -24,4 +24,5 @@ public class GetPackageResponseDto public int MaxNetworkLevel { get; set; } public long MagicWalletMaxDeposit { get; set; } public long MagicWalletMaxCredit { get; set; } + public List FeatureIds { get; set; } = new(); } \ No newline at end of file diff --git a/src/CMSMicroservice.Protobuf/CMSMicroservice.Protobuf.csproj b/src/CMSMicroservice.Protobuf/CMSMicroservice.Protobuf.csproj index 053fd42..d87bd05 100644 --- a/src/CMSMicroservice.Protobuf/CMSMicroservice.Protobuf.csproj +++ b/src/CMSMicroservice.Protobuf/CMSMicroservice.Protobuf.csproj @@ -3,7 +3,7 @@ net9.0 enable enable - 0.0.187 + 0.0.188 None False False diff --git a/src/CMSMicroservice.Protobuf/Protos/package.proto b/src/CMSMicroservice.Protobuf/Protos/package.proto index 65dc3cf..3b88874 100644 --- a/src/CMSMicroservice.Protobuf/Protos/package.proto +++ b/src/CMSMicroservice.Protobuf/Protos/package.proto @@ -99,6 +99,7 @@ message CreateNewPackageRequest int32 max_network_level = 15; int64 magic_wallet_max_deposit = 16; int64 magic_wallet_max_credit = 17; + repeated int64 feature_ids = 18; } message CreateNewPackageResponse { @@ -124,6 +125,7 @@ message UpdatePackageRequest int32 max_network_level = 16; int64 magic_wallet_max_deposit = 17; int64 magic_wallet_max_credit = 18; + repeated int64 feature_ids = 19; } message DeletePackageRequest { @@ -152,6 +154,7 @@ message GetPackageResponse int32 max_network_level = 15; int64 magic_wallet_max_deposit = 16; int64 magic_wallet_max_credit = 17; + repeated int64 feature_ids = 18; } message GetAllPackageByFilterRequest { @@ -191,6 +194,7 @@ message GetAllPackageByFilterResponseModel int32 max_network_level = 15; int64 magic_wallet_max_deposit = 16; int64 magic_wallet_max_credit = 17; + repeated int64 feature_ids = 18; } message GetUserPackageStatusRequest