feat: implement commission calculation strategy with ORM and SP options
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 1m43s
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 1m43s
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
namespace CMSMicroservice.Application.Common.Interfaces;
|
||||
|
||||
/// <summary>
|
||||
/// استراتژی محاسبه کمیسیون هفتگی
|
||||
/// دو پیادهسازی دارد: ORM و Stored Procedure
|
||||
/// </summary>
|
||||
public interface ICommissionCalculationStrategy
|
||||
{
|
||||
/// <summary>
|
||||
/// محاسبه تعادلهای هفتگی (مرحله 1)
|
||||
/// </summary>
|
||||
/// <param name="weekDefinitionId">شناسه هفته</param>
|
||||
/// <param name="forceRecalculate">محاسبه مجدد حتی اگر قبلاً محاسبه شده</param>
|
||||
/// <param name="cancellationToken">توکن لغو</param>
|
||||
/// <returns>تعداد رکوردهای محاسبه شده</returns>
|
||||
Task<int> CalculateWeeklyBalancesAsync(
|
||||
long weekDefinitionId,
|
||||
bool forceRecalculate,
|
||||
CancellationToken cancellationToken = default);
|
||||
|
||||
/// <summary>
|
||||
/// محاسبه استخر کمیسیون و پرداختها (مرحله 2)
|
||||
/// </summary>
|
||||
/// <param name="weekDefinitionId">شناسه هفته</param>
|
||||
/// <param name="forceRecalculate">محاسبه مجدد حتی اگر قبلاً محاسبه شده</param>
|
||||
/// <param name="cancellationToken">توکن لغو</param>
|
||||
/// <returns>شناسه Pool ایجاد شده</returns>
|
||||
Task<long> CalculateWeeklyCommissionPoolAsync(
|
||||
long weekDefinitionId,
|
||||
bool forceRecalculate,
|
||||
CancellationToken cancellationToken = default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// نوع استراتژی محاسبه کمیسیون
|
||||
/// </summary>
|
||||
public enum CommissionCalculationStrategyType
|
||||
{
|
||||
/// <summary>
|
||||
/// استفاده از Entity Framework (ORM) - پیشفرض
|
||||
/// </summary>
|
||||
Orm = 0,
|
||||
|
||||
/// <summary>
|
||||
/// استفاده از Stored Procedure - بهینهتر برای دادههای زیاد
|
||||
/// </summary>
|
||||
StoredProcedure = 1
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
namespace CMSMicroservice.Application.Common.Interfaces;
|
||||
|
||||
/// <summary>
|
||||
/// Factory برای ایجاد Strategy مناسب براساس Config
|
||||
/// </summary>
|
||||
public interface ICommissionCalculationStrategyFactory
|
||||
{
|
||||
/// <summary>
|
||||
/// ایجاد Strategy براساس تنظیمات سیستم
|
||||
/// </summary>
|
||||
/// <returns>استراتژی مناسب (ORM یا SP)</returns>
|
||||
Task<ICommissionCalculationStrategy> CreateStrategyAsync(CancellationToken cancellationToken = default);
|
||||
|
||||
/// <summary>
|
||||
/// ایجاد Strategy مشخص
|
||||
/// </summary>
|
||||
/// <param name="strategyType">نوع استراتژی</param>
|
||||
/// <returns>استراتژی درخواستی</returns>
|
||||
ICommissionCalculationStrategy CreateStrategy(CommissionCalculationStrategyType strategyType);
|
||||
}
|
||||
Reference in New Issue
Block a user