namespace CMSMicroservice.Application.CommissionCQ.Queries.GetWeeklyCommissionPool; public class GetWeeklyCommissionPoolQueryHandler : IRequestHandler { private readonly IApplicationDbContext _context; private readonly IWeekDefinitionRepository _weekDefinitionRepository; public GetWeeklyCommissionPoolQueryHandler( IApplicationDbContext context, IWeekDefinitionRepository weekDefinitionRepository) { _context = context; _weekDefinitionRepository = weekDefinitionRepository; } public async Task Handle(GetWeeklyCommissionPoolQuery request, CancellationToken cancellationToken) { var query = _context.WeeklyCommissionPools .Include(x => x.WeekDefinition) .Include(x => x.Package) .AsNoTracking() .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 { Id = x.Id, WeekDefinitionId = x.WeekDefinitionId, WeekDisplayName = x.WeekDefinition.DisplayName, TotalPoolAmount = x.TotalPoolAmount, TotalBalances = x.TotalBalances, ValuePerBalance = x.ValuePerBalance, IsCalculated = x.IsCalculated, CalculatedAt = x.CalculatedAt, Created = x.Created, PackageId = x.PackageId, PackageTitle = x.Package != null ? x.Package.Title : string.Empty }) .FirstOrDefaultAsync(cancellationToken); return pool ?? new WeeklyCommissionPoolDto(); } }