using System.Runtime.CompilerServices; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using RecruitmentDAL.DTO.Reports; using RecruitmentDAL.Query.Reports; namespace RecruitmentDAL.CustomeCode.Reports.PipelineConversionFunnel { public class PipelineConversionFunnelDAL : IPipelineConversionFunnelDAL { private readonly IQueryExecutor _QueryExecutor; public PipelineConversionFunnelDAL(IQueryExecutor queryExecutor) { _QueryExecutor = queryExecutor; } // Small bounded aggregate (one row per stage in the filtered/whole-tenant template set) — // no real SQL-level OFFSET/FETCH, see PipelineConversionFunnelQB's doc comment. public async Task> GetPipelineConversionFunnel( int firstNumber, int maxResult, int? selectionProcessTemplateId, LoginDTO login, CancellationToken ct) { var parameters = new { TenantId = login.ClientId, SelectionProcessTemplateId = selectionProcessTemplateId }; return await _QueryExecutor .QueryPagedAsync(login, PipelineConversionFunnelQB.GET_PIPELINE_CONVERSION_FUNNEL, parameters) .ConfigureAwait(false); } public async IAsyncEnumerable GetPipelineConversionFunnelStream( int? selectionProcessTemplateId, LoginDTO login, [EnumeratorCancellation] CancellationToken ct) { var parameters = new { TenantId = login.ClientId, SelectionProcessTemplateId = selectionProcessTemplateId }; await foreach (var row in _QueryExecutor .QueryStreamAsync(login, PipelineConversionFunnelQB.GET_PIPELINE_CONVERSION_FUNNEL, parameters, ct) .ConfigureAwait(false)) { yield return row; } } } }