using CMSMicroservice.Application.Common.Interfaces; using CMSMicroservice.Domain.Common; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; namespace CMSMicroservice.Infrastructure.Services.Commission; /// /// Factory برای ایجاد Strategy مناسب براساس Config /// public class CommissionCalculationStrategyFactory : ICommissionCalculationStrategyFactory { private readonly IApplicationDbContext _context; private readonly IWeekDefinitionRepository _weekRepository; private readonly IServiceProvider _serviceProvider; public CommissionCalculationStrategyFactory( IApplicationDbContext context, IWeekDefinitionRepository weekRepository, IServiceProvider serviceProvider) { _context = context; _weekRepository = weekRepository; _serviceProvider = serviceProvider; } /// public Task CreateStrategyAsync(CancellationToken cancellationToken = default) { // خواندن Config از SystemConstants (استاتیک) var strategyValue = SystemConstants.CommissionCalculationStrategy.ToUpperInvariant(); var strategyType = strategyValue switch { "SP" or "STOREDPROCEDURE" or "STORED_PROCEDURE" => CommissionCalculationStrategyType.StoredProcedure, _ => CommissionCalculationStrategyType.Orm }; return Task.FromResult(CreateStrategy(strategyType)); } /// public ICommissionCalculationStrategy CreateStrategy(CommissionCalculationStrategyType strategyType) { return strategyType switch { CommissionCalculationStrategyType.StoredProcedure => new StoredProcedureCommissionCalculationStrategy(_context), _ => // Orm is default new OrmCommissionCalculationStrategy(_context, _weekRepository) }; } }