feat(commission): add per-package calculation support
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 15m3s

- SP sp_CalculateWeeklyBalances: added @PackageId, @InputMaxBalancesPerLeg, @InputMaxNetworkLevel params; filters by PackageId
- SP sp_CalculateWeeklyCommissionPool: added @PackageId param; all queries filter by PackageId/WeeklyPoolId for isolation
- ICommissionCalculationStrategy: added optional PackageId param to both methods
- StoredProcedureCommissionCalculationStrategy: loops per-package for both Balance and Pool methods; filters by packageId if provided
- OrmCommissionCalculationStrategy: signature updated to match interface
- TriggerWeeklyCalculationCommand: added PackageId optional field
- TriggerWeeklyCalculationCommandHandler: passes PackageId to strategy
- GetWeeklyCommissionPoolQuery: added optional PackageId filter
- GetWeeklyCommissionPoolQueryHandler: filters pool by PackageId if provided
- GetAllWeeklyPoolsQuery/Handler/DTO: added PackageId filter + PackageTitle in response
- Proto commission.proto: added package_id to TriggerWeeklyCalculationRequest, GetWeeklyCommissionPoolRequest, WeeklyCommissionPoolModel, GetWeeklyCommissionPoolResponse, GetAllWeeklyPoolsRequest
- CommissionProfile: added explicit mappings for TriggerWeeklyCalculation, GetWeeklyCommissionPool, GetAllWeeklyPools

Fixes: SP picks wrong pool when multiple packages per week
Fixes: SP ignores PackageId on ForceRecalculate (now uses WeeklyPoolId)
Fixes: Zero-balance pools not fully recorded (now sets TotalBalances=0, ValuePerBalance=0)
This commit is contained in:
masoodafar-web
2026-04-24 03:43:20 +03:30
parent a35e2eeb92
commit 4d6d77531d
14 changed files with 1548 additions and 40 deletions
File diff suppressed because it is too large Load Diff
@@ -21,4 +21,9 @@ public record TriggerWeeklyCalculationCommand : IRequest<TriggerWeeklyCalculatio
/// Skip pool calculation and payout processing (Step 2) /// Skip pool calculation and payout processing (Step 2)
/// </summary> /// </summary>
public bool SkipPayouts { get; init; } public bool SkipPayouts { get; init; }
/// <summary>
/// شناسه پکیج — اگر مقدار داشته باشد فقط این پکیج محاسبه می‌شود، در غیر این صورت همه پکیج‌ها
/// </summary>
public long? PackageId { get; init; }
} }
@@ -53,6 +53,7 @@ public class TriggerWeeklyCalculationCommandHandler : IRequestHandler<TriggerWee
var balancesCount = await strategy.CalculateWeeklyBalancesAsync( var balancesCount = await strategy.CalculateWeeklyBalancesAsync(
request.WeekDefinitionId, request.WeekDefinitionId,
request.ForceRecalculate, request.ForceRecalculate,
request.PackageId,
cancellationToken); cancellationToken);
steps.Add($"محاسبه امتیازات هفتگی ({balancesCount} کاربر)"); steps.Add($"محاسبه امتیازات هفتگی ({balancesCount} کاربر)");
@@ -64,6 +65,7 @@ public class TriggerWeeklyCalculationCommandHandler : IRequestHandler<TriggerWee
var poolId = await strategy.CalculateWeeklyCommissionPoolAsync( var poolId = await strategy.CalculateWeeklyCommissionPoolAsync(
request.WeekDefinitionId, request.WeekDefinitionId,
request.ForceRecalculate, request.ForceRecalculate,
request.PackageId,
cancellationToken); cancellationToken);
steps.Add($"محاسبه استخر و پرداخت کاربران (Pool: {poolId})"); steps.Add($"محاسبه استخر و پرداخت کاربران (Pool: {poolId})");
@@ -20,6 +20,11 @@ public record GetAllWeeklyPoolsQuery : IRequest<GetAllWeeklyPoolsResponseDto>
/// </summary> /// </summary>
public bool? OnlyCalculated { get; init; } public bool? OnlyCalculated { get; init; }
/// <summary>
/// فیلتر بر اساس پکیج (اختیاری)
/// </summary>
public long? PackageId { get; init; }
/// <summary> /// <summary>
/// شماره صفحه /// شماره صفحه
/// </summary> /// </summary>
@@ -17,6 +17,7 @@ public class GetAllWeeklyPoolsQueryHandler : IRequestHandler<GetAllWeeklyPoolsQu
{ {
var query = _context.WeeklyCommissionPools var query = _context.WeeklyCommissionPools
.Include(i=> i.WeekDefinition) .Include(i=> i.WeekDefinition)
.Include(i => i.Package)
.AsNoTracking(); .AsNoTracking();
// Apply filters // Apply filters
@@ -35,6 +36,11 @@ public class GetAllWeeklyPoolsQueryHandler : IRequestHandler<GetAllWeeklyPoolsQu
query = query.Where(x => x.IsCalculated); query = query.Where(x => x.IsCalculated);
} }
if (request.PackageId.HasValue)
{
query = query.Where(x => x.PackageId == request.PackageId.Value);
}
// Order by week number descending (newest first) // Order by week number descending (newest first)
query = query.OrderByDescending(x => x.WeekDefinitionId); query = query.OrderByDescending(x => x.WeekDefinitionId);
@@ -55,7 +61,9 @@ public class GetAllWeeklyPoolsQueryHandler : IRequestHandler<GetAllWeeklyPoolsQu
ValuePerBalance = x.ValuePerBalance, ValuePerBalance = x.ValuePerBalance,
IsCalculated = x.IsCalculated, IsCalculated = x.IsCalculated,
CalculatedAt = x.CalculatedAt, CalculatedAt = x.CalculatedAt,
Created = x.Created Created = x.Created,
PackageId = x.PackageId,
PackageTitle = x.Package != null ? x.Package.Title : string.Empty
}) })
.ToListAsync(cancellationToken); .ToListAsync(cancellationToken);
@@ -17,6 +17,8 @@ public record WeeklyCommissionPoolDto
public bool IsCalculated { get; init; } public bool IsCalculated { get; init; }
public DateTime? CalculatedAt { get; init; } public DateTime? CalculatedAt { get; init; }
public DateTime Created { get; init; } public DateTime Created { get; init; }
public long PackageId { get; init; }
public string PackageTitle { get; init; } = string.Empty;
} }
public record MetaDataDto public record MetaDataDto
@@ -9,4 +9,9 @@ public record GetWeeklyCommissionPoolQuery : IRequest<WeeklyCommissionPoolDto?>
/// شماره هفته /// شماره هفته
/// </summary> /// </summary>
public long WeekDefinitionId { get; init; } public long WeekDefinitionId { get; init; }
/// <summary>
/// شناسه پکیج — اختیاری
/// </summary>
public long? PackageId { get; init; }
} }
@@ -15,29 +15,32 @@ public class GetWeeklyCommissionPoolQueryHandler : IRequestHandler<GetWeeklyComm
public async Task<WeeklyCommissionPoolDto?> Handle(GetWeeklyCommissionPoolQuery request, CancellationToken cancellationToken) public async Task<WeeklyCommissionPoolDto?> Handle(GetWeeklyCommissionPoolQuery request, CancellationToken cancellationToken)
{ {
var pool = await _context.WeeklyCommissionPools var query = _context.WeeklyCommissionPools
.Include(x => x.WeekDefinition) .Include(x => x.WeekDefinition)
.Include(x => x.Package)
.AsNoTracking() .AsNoTracking()
.Where(x => x.WeekDefinitionId == request.WeekDefinitionId) .Where(x => x.WeekDefinitionId == request.WeekDefinitionId);
if (request.PackageId.HasValue)
query = query.Where(x => x.PackageId == request.PackageId.Value);
var pool = await query
.Select(x => new WeeklyCommissionPoolDto .Select(x => new WeeklyCommissionPoolDto
{ {
Id = x.Id, Id = x.Id,
WeekDefinitionId = x.WeekDefinitionId, WeekDefinitionId = x.WeekDefinitionId,
WeekDisplayName=x.WeekDefinition.DisplayName, WeekDisplayName = x.WeekDefinition.DisplayName,
TotalPoolAmount = x.TotalPoolAmount, TotalPoolAmount = x.TotalPoolAmount,
TotalBalances = x.TotalBalances, TotalBalances = x.TotalBalances,
ValuePerBalance = x.ValuePerBalance, ValuePerBalance = x.ValuePerBalance,
IsCalculated = x.IsCalculated, IsCalculated = x.IsCalculated,
CalculatedAt = x.CalculatedAt, CalculatedAt = x.CalculatedAt,
Created = x.Created Created = x.Created,
PackageId = x.PackageId,
PackageTitle = x.Package != null ? x.Package.Title : string.Empty
}) })
.FirstOrDefaultAsync(cancellationToken); .FirstOrDefaultAsync(cancellationToken);
// if (pool != null)
// {
// pool.WeekDisplayName = _weekDefinitionRepository.GetDisplayNameByGregorianWeekNumber(pool.WeekNumber);
// }
return pool ?? new WeeklyCommissionPoolDto(); return pool ?? new WeeklyCommissionPoolDto();
} }
} }
@@ -14,4 +14,6 @@ public class WeeklyCommissionPoolDto
public bool IsCalculated { get; set; } public bool IsCalculated { get; set; }
public DateTime? CalculatedAt { get; set; } public DateTime? CalculatedAt { get; set; }
public DateTimeOffset Created { get; set; } public DateTimeOffset Created { get; set; }
public long PackageId { get; set; }
public string PackageTitle { get; set; } = string.Empty;
} }
@@ -11,11 +11,13 @@ public interface ICommissionCalculationStrategy
/// </summary> /// </summary>
/// <param name="weekDefinitionId">شناسه هفته</param> /// <param name="weekDefinitionId">شناسه هفته</param>
/// <param name="forceRecalculate">محاسبه مجدد حتی اگر قبلاً محاسبه شده</param> /// <param name="forceRecalculate">محاسبه مجدد حتی اگر قبلاً محاسبه شده</param>
/// <param name="packageId">اگر مقدار داشته باشد فقط این پکیج محاسبه می‌شود — در غیر این صورت همه پکیج‌ها</param>
/// <param name="cancellationToken">توکن لغو</param> /// <param name="cancellationToken">توکن لغو</param>
/// <returns>تعداد رکوردهای محاسبه شده</returns> /// <returns>تعداد رکوردهای محاسبه شده</returns>
Task<int> CalculateWeeklyBalancesAsync( Task<int> CalculateWeeklyBalancesAsync(
long weekDefinitionId, long weekDefinitionId,
bool forceRecalculate, bool forceRecalculate,
long? packageId = null,
CancellationToken cancellationToken = default); CancellationToken cancellationToken = default);
/// <summary> /// <summary>
@@ -23,11 +25,13 @@ public interface ICommissionCalculationStrategy
/// </summary> /// </summary>
/// <param name="weekDefinitionId">شناسه هفته</param> /// <param name="weekDefinitionId">شناسه هفته</param>
/// <param name="forceRecalculate">محاسبه مجدد حتی اگر قبلاً محاسبه شده</param> /// <param name="forceRecalculate">محاسبه مجدد حتی اگر قبلاً محاسبه شده</param>
/// <param name="packageId">اگر مقدار داشته باشد فقط این پکیج محاسبه می‌شود — در غیر این صورت همه پکیج‌ها</param>
/// <param name="cancellationToken">توکن لغو</param> /// <param name="cancellationToken">توکن لغو</param>
/// <returns>شناسه Pool ایجاد شده</returns> /// <returns>شناسه Pool ایجاد شده</returns>
Task<long> CalculateWeeklyCommissionPoolAsync( Task<long> CalculateWeeklyCommissionPoolAsync(
long weekDefinitionId, long weekDefinitionId,
bool forceRecalculate, bool forceRecalculate,
long? packageId = null,
CancellationToken cancellationToken = default); CancellationToken cancellationToken = default);
} }
@@ -30,6 +30,7 @@ public class OrmCommissionCalculationStrategy : ICommissionCalculationStrategy
public async Task<int> CalculateWeeklyBalancesAsync( public async Task<int> CalculateWeeklyBalancesAsync(
long weekDefinitionId, long weekDefinitionId,
bool forceRecalculate, bool forceRecalculate,
long? packageId = null,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var regorianWeekNumber = _weekRepository.GetGregorianWeekNumber(weekDefinitionId); var regorianWeekNumber = _weekRepository.GetGregorianWeekNumber(weekDefinitionId);
@@ -211,6 +212,7 @@ public class OrmCommissionCalculationStrategy : ICommissionCalculationStrategy
public async Task<long> CalculateWeeklyCommissionPoolAsync( public async Task<long> CalculateWeeklyCommissionPoolAsync(
long weekDefinitionId, long weekDefinitionId,
bool forceRecalculate, bool forceRecalculate,
long? packageId = null,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var weekDefinition = _weekRepository.GetGregorianWeekNumber(weekDefinitionId); var weekDefinition = _weekRepository.GetGregorianWeekNumber(weekDefinitionId);
@@ -21,6 +21,7 @@ public class StoredProcedureCommissionCalculationStrategy : ICommissionCalculati
public async Task<int> CalculateWeeklyBalancesAsync( public async Task<int> CalculateWeeklyBalancesAsync(
long weekDefinitionId, long weekDefinitionId,
bool forceRecalculate, bool forceRecalculate,
long? packageId = null,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var dbContext = _context as DbContext; var dbContext = _context as DbContext;
@@ -29,10 +30,11 @@ public class StoredProcedureCommissionCalculationStrategy : ICommissionCalculati
throw new InvalidOperationException("DbContext برای اجرای Stored Procedure در دسترس نیست"); throw new InvalidOperationException("DbContext برای اجرای Stored Procedure در دسترس نیست");
} }
// بارگذاری پکیج‌های فعال // بارگذاری پکیج‌های فعال — اگر packageId داده شده فقط همان پکیج
var activePackages = await _context.Packages var packagesQuery = _context.Packages.Where(p => !p.IsDeleted && p.IsActive);
.Where(p => !p.IsDeleted && p.IsActive) if (packageId.HasValue)
.ToListAsync(cancellationToken); packagesQuery = packagesQuery.Where(p => p.Id == packageId.Value);
var activePackages = await packagesQuery.ToListAsync(cancellationToken);
if (!activePackages.Any()) if (!activePackages.Any())
{ {
@@ -109,6 +111,7 @@ public class StoredProcedureCommissionCalculationStrategy : ICommissionCalculati
public async Task<long> CalculateWeeklyCommissionPoolAsync( public async Task<long> CalculateWeeklyCommissionPoolAsync(
long weekDefinitionId, long weekDefinitionId,
bool forceRecalculate, bool forceRecalculate,
long? packageId = null,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var dbContext = _context as DbContext; var dbContext = _context as DbContext;
@@ -117,38 +120,59 @@ public class StoredProcedureCommissionCalculationStrategy : ICommissionCalculati
throw new InvalidOperationException("DbContext برای اجرای Stored Procedure در دسترس نیست"); throw new InvalidOperationException("DbContext برای اجرای Stored Procedure در دسترس نیست");
} }
// بارگذاری پکیج‌های فعال — اگر packageId داده شده فقط همان پکیج
var packagesQuery = _context.Packages.Where(p => !p.IsDeleted && p.IsActive);
if (packageId.HasValue)
packagesQuery = packagesQuery.Where(p => p.Id == packageId.Value);
var activePackages = await packagesQuery.ToListAsync(cancellationToken);
if (!activePackages.Any())
{
throw new InvalidOperationException("هیچ پکیج فعالی یافت نشد");
}
var connection = dbContext.Database.GetDbConnection(); var connection = dbContext.Database.GetDbConnection();
await connection.OpenAsync(cancellationToken); await connection.OpenAsync(cancellationToken);
long lastPoolId = 0;
try try
{ {
using var command = connection.CreateCommand(); // حلقه روی پکیج‌ها — هر پکیج Pool مستقل دارد
command.CommandText = "CMS.sp_CalculateWeeklyCommissionPool"; foreach (var package in activePackages)
command.CommandType = System.Data.CommandType.StoredProcedure; {
command.CommandTimeout = 300; // 5 دقیقه timeout using var command = connection.CreateCommand();
command.CommandText = "CMS.sp_CalculateWeeklyCommissionPool";
command.CommandType = System.Data.CommandType.StoredProcedure;
command.CommandTimeout = 300;
// پارامترها var paramWeekDefinitionId = command.CreateParameter();
var paramWeekDefinitionId = command.CreateParameter(); paramWeekDefinitionId.ParameterName = "@WeekDefinitionId";
paramWeekDefinitionId.ParameterName = "@WeekDefinitionId"; paramWeekDefinitionId.Value = weekDefinitionId;
paramWeekDefinitionId.Value = weekDefinitionId; command.Parameters.Add(paramWeekDefinitionId);
command.Parameters.Add(paramWeekDefinitionId);
var paramForceRecalculate = command.CreateParameter(); var paramPackageId = command.CreateParameter();
paramForceRecalculate.ParameterName = "@ForceRecalculate"; paramPackageId.ParameterName = "@PackageId";
paramForceRecalculate.Value = forceRecalculate; paramPackageId.Value = package.Id;
command.Parameters.Add(paramForceRecalculate); command.Parameters.Add(paramPackageId);
// پارامتر خروجی - شناسه Pool var paramForceRecalculate = command.CreateParameter();
var paramPoolId = command.CreateParameter(); paramForceRecalculate.ParameterName = "@ForceRecalculate";
paramPoolId.ParameterName = "@PoolId"; paramForceRecalculate.Value = forceRecalculate;
paramPoolId.Direction = System.Data.ParameterDirection.Output; command.Parameters.Add(paramForceRecalculate);
paramPoolId.DbType = System.Data.DbType.Int64;
command.Parameters.Add(paramPoolId);
await command.ExecuteNonQueryAsync(cancellationToken); var paramPoolId = command.CreateParameter();
paramPoolId.ParameterName = "@PoolId";
paramPoolId.Direction = System.Data.ParameterDirection.Output;
paramPoolId.DbType = System.Data.DbType.Int64;
command.Parameters.Add(paramPoolId);
var poolId = (long)(paramPoolId.Value ?? 0L); await command.ExecuteNonQueryAsync(cancellationToken);
return poolId;
lastPoolId = (long)(paramPoolId.Value ?? 0L);
}
return lastPoolId;
} }
finally finally
{ {
@@ -197,6 +197,7 @@ message RejectWithdrawalRequest
message GetWeeklyCommissionPoolRequest message GetWeeklyCommissionPoolRequest
{ {
int64 week_definition_id = 1; int64 week_definition_id = 1;
google.protobuf.Int64Value package_id = 2; // اگر خالی باشد اولین pool هفته را برمی‌گرداند
} }
message GetWeeklyCommissionPoolResponse message GetWeeklyCommissionPoolResponse
@@ -209,6 +210,8 @@ message GetWeeklyCommissionPoolResponse
bool is_calculated = 7; bool is_calculated = 7;
google.protobuf.Timestamp calculated_at = 8; google.protobuf.Timestamp calculated_at = 8;
google.protobuf.Timestamp created = 9; google.protobuf.Timestamp created = 9;
int64 package_id = 10;
string package_title = 11;
} }
// GetUserCommissionPayouts Query // GetUserCommissionPayouts Query
@@ -357,8 +360,9 @@ message GetAllWeeklyPoolsRequest
google.protobuf.Int64Value from_week_definition_id = 1; // WeekDefinitionId filter (optional) google.protobuf.Int64Value from_week_definition_id = 1; // WeekDefinitionId filter (optional)
google.protobuf.Int64Value to_week_definition_id = 2; // WeekDefinitionId filter (optional) google.protobuf.Int64Value to_week_definition_id = 2; // WeekDefinitionId filter (optional)
google.protobuf.BoolValue only_calculated = 3; // Only show calculated pools google.protobuf.BoolValue only_calculated = 3; // Only show calculated pools
int32 page_index = 4; google.protobuf.Int64Value package_id = 4; // فیلتر بر اساس پکیج (optional)
int32 page_size = 5; int32 page_index = 5;
int32 page_size = 6;
} }
message GetAllWeeklyPoolsResponse message GetAllWeeklyPoolsResponse
@@ -378,6 +382,8 @@ message WeeklyCommissionPoolModel
bool is_calculated = 7; bool is_calculated = 7;
google.protobuf.Timestamp calculated_at = 8; google.protobuf.Timestamp calculated_at = 8;
google.protobuf.Timestamp created = 9; google.protobuf.Timestamp created = 9;
int64 package_id = 10;
string package_title = 11;
} }
// GetWithdrawalRequests Query // GetWithdrawalRequests Query
@@ -407,6 +413,7 @@ message TriggerWeeklyCalculationRequest
bool skip_balances = 3; // Skip balance calculation (only pool and payouts) bool skip_balances = 3; // Skip balance calculation (only pool and payouts)
bool skip_pool = 4; // Skip pool calculation (only balances and payouts) bool skip_pool = 4; // Skip pool calculation (only balances and payouts)
bool skip_payouts = 5; // Skip payout processing (only balances and pool) bool skip_payouts = 5; // Skip payout processing (only balances and pool)
google.protobuf.Int64Value package_id = 6; // اگر مقدار دارد فقط این پکیج محاسبه می‌شود - در غیر این صورت همه پکیج‌ها
} }
message TriggerWeeklyCalculationResponse message TriggerWeeklyCalculationResponse
@@ -1,4 +1,6 @@
using System.Linq; using System.Linq;
using CMSMicroservice.Application.CommissionCQ.Commands.TriggerWeeklyCalculation;
using CMSMicroservice.Application.CommissionCQ.Queries.GetAllWeeklyPools;
using CMSMicroservice.Application.CommissionCQ.Queries.GetUserWeeklyBalances; using CMSMicroservice.Application.CommissionCQ.Queries.GetUserWeeklyBalances;
using CMSMicroservice.Application.CommissionCQ.Queries.GetMyWeeklyBalances; using CMSMicroservice.Application.CommissionCQ.Queries.GetMyWeeklyBalances;
using CMSMicroservice.Application.CommissionCQ.Queries.GetAvailableWeeks; using CMSMicroservice.Application.CommissionCQ.Queries.GetAvailableWeeks;
@@ -23,6 +25,34 @@ public class CommissionProfile : IRegister
.Map(dest => dest.FutureWeeksCount, src => src.FutureWeeksCount > 0 ? src.FutureWeeksCount : 4) .Map(dest => dest.FutureWeeksCount, src => src.FutureWeeksCount > 0 ? src.FutureWeeksCount : 4)
.Map(dest => dest.PastWeeksCount, src => src.PastWeeksCount > 0 ? src.PastWeeksCount : 12); .Map(dest => dest.PastWeeksCount, src => src.PastWeeksCount > 0 ? src.PastWeeksCount : 12);
// TriggerWeeklyCalculation Request Mapping (proto → command)
config.NewConfig<TriggerWeeklyCalculationRequest, CMSMicroservice.Application.CommissionCQ.Commands.TriggerWeeklyCalculation.TriggerWeeklyCalculationCommand>()
.Map(dest => dest.WeekDefinitionId, src => src.WeekDefinitionId)
.Map(dest => dest.ForceRecalculate, src => src.ForceRecalculate)
.Map(dest => dest.SkipBalances, src => src.SkipBalances)
.Map(dest => dest.SkipPayouts, src => src.SkipPayouts)
.Map(dest => dest.PackageId, src => src.PackageId != null ? src.PackageId.Value : (long?)null);
// GetWeeklyCommissionPool Request Mapping
config.NewConfig<GetWeeklyCommissionPoolRequest, CMSMicroservice.Application.CommissionCQ.Queries.GetWeeklyCommissionPool.GetWeeklyCommissionPoolQuery>()
.Map(dest => dest.WeekDefinitionId, src => src.WeekDefinitionId)
.Map(dest => dest.PackageId, src => src.PackageId != null ? src.PackageId.Value : (long?)null);
// GetWeeklyCommissionPool Response Mapping
config.NewConfig<CMSMicroservice.Application.CommissionCQ.Queries.GetWeeklyCommissionPool.WeeklyCommissionPoolDto, GetWeeklyCommissionPoolResponse>()
.Map(dest => dest.Id, src => src.Id)
.Map(dest => dest.WeekDefinitionId, src => src.WeekDefinitionId)
.Map(dest => dest.TotalPoolAmount, src => src.TotalPoolAmount)
.Map(dest => dest.TotalBalances, src => (int)src.TotalBalances)
.Map(dest => dest.ValuePerBalance, src => (long)src.ValuePerBalance)
.Map(dest => dest.IsCalculated, src => src.IsCalculated)
.Map(dest => dest.CalculatedAt, src => src.CalculatedAt.HasValue
? Timestamp.FromDateTime(DateTime.SpecifyKind(src.CalculatedAt.Value, DateTimeKind.Utc))
: null)
.Map(dest => dest.Created, src => Timestamp.FromDateTimeOffset(src.Created))
.Map(dest => dest.PackageId, src => src.PackageId)
.Map(dest => dest.PackageTitle, src => src.PackageTitle);
// GetAvailableWeeks Response Mapping // GetAvailableWeeks Response Mapping
config.NewConfig<GetAvailableWeeksResponseDto, GetAvailableWeeksResponse>() config.NewConfig<GetAvailableWeeksResponseDto, GetAvailableWeeksResponse>()
.Map(dest => dest.CurrentWeek, src => src.CurrentWeek) .Map(dest => dest.CurrentWeek, src => src.CurrentWeek)
@@ -91,6 +121,44 @@ public class CommissionProfile : IRegister
} }
: null); : null);
// GetAllWeeklyPools Request Mapping
config.NewConfig<GetAllWeeklyPoolsRequest, GetAllWeeklyPoolsQuery>()
.Map(dest => dest.FromWeekDefinitionId, src => src.FromWeekDefinitionId != null ? src.FromWeekDefinitionId.Value : (long?)null)
.Map(dest => dest.ToWeekDefinitionId, src => src.ToWeekDefinitionId != null ? src.ToWeekDefinitionId.Value : (long?)null)
.Map(dest => dest.OnlyCalculated, src => src.OnlyCalculated != null ? src.OnlyCalculated.Value : (bool?)null)
.Map(dest => dest.PackageId, src => src.PackageId != null ? src.PackageId.Value : (long?)null)
.Map(dest => dest.PageIndex, src => src.PageIndex > 0 ? src.PageIndex : 1)
.Map(dest => dest.PageSize, src => src.PageSize > 0 ? src.PageSize : 10);
// GetAllWeeklyPools Response Mapping
config.NewConfig<GetAllWeeklyPoolsResponseDto, GetAllWeeklyPoolsResponse>()
.Map(dest => dest.MetaData, src => src.MetaData != null
? new CMSMicroservice.Protobuf.Protos.MetaData
{
TotalCount = src.MetaData.TotalCount,
PageSize = src.MetaData.PageSize,
CurrentPage = src.MetaData.CurrentPage,
TotalPage = src.MetaData.TotalPages
}
: new CMSMicroservice.Protobuf.Protos.MetaData())
.Map(dest => dest.Models, src => src.Models);
// WeeklyCommissionPoolDto → WeeklyCommissionPoolModel
config.NewConfig<WeeklyCommissionPoolDto, WeeklyCommissionPoolModel>()
.Map(dest => dest.Id, src => src.Id)
.Map(dest => dest.WeekDefinitionId, src => src.WeekDefinitionId)
.Map(dest => dest.WeekDisplayName, src => src.WeekDisplayName)
.Map(dest => dest.TotalPoolAmount, src => src.TotalPoolAmount)
.Map(dest => dest.TotalBalances, src => src.TotalBalances)
.Map(dest => dest.ValuePerBalance, src => src.ValuePerBalance)
.Map(dest => dest.IsCalculated, src => src.IsCalculated)
.Map(dest => dest.CalculatedAt, src => src.CalculatedAt.HasValue
? Timestamp.FromDateTime(DateTime.SpecifyKind(src.CalculatedAt.Value, DateTimeKind.Utc))
: null)
.Map(dest => dest.Created, src => Timestamp.FromDateTime(DateTime.SpecifyKind(src.Created, DateTimeKind.Utc)))
.Map(dest => dest.PackageId, src => src.PackageId)
.Map(dest => dest.PackageTitle, src => src.PackageTitle);
// GetWeekDefinitions Response Mapping // GetWeekDefinitions Response Mapping
config.NewConfig<GetWeekDefinitionsResponseDto, GetWeekDefinitionsResponse>() config.NewConfig<GetWeekDefinitionsResponseDto, GetWeekDefinitionsResponse>()
.Map(dest => dest.TotalCount, src => src.TotalCount) .Map(dest => dest.TotalCount, src => src.TotalCount)