feat(commission): add per-package calculation support
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 15m3s
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:
File diff suppressed because it is too large
Load Diff
+5
@@ -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; }
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -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})");
|
||||||
|
|||||||
+5
@@ -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>
|
||||||
|
|||||||
+9
-1
@@ -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);
|
||||||
|
|
||||||
|
|||||||
+2
@@ -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
|
||||||
|
|||||||
+5
@@ -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; }
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-9
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
@@ -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);
|
||||||
|
|||||||
+50
-26
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user