using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using GB5Shared.DTO.Framework.Login; using GB5Shared.DTO.Qualifier; using GB5Shared.QueryExecutor; namespace GB5Shared.GOP.Qualifier { public interface IBulkQualifierRunBLL { // Fast, synchronous: allocates the AutoNumber id, inserts the Pending header row, // and returns immediately. The caller (EnqueueQualifierBulkRun endpoint) is // responsible for kicking off ExecuteBulkRunAsync in its own new DI scope -- // same split as IceImport's CommitImport/RetryImportRun endpoints. Task EnqueueRunAsync( int qualifierId, string entityCode, byte stage, byte scope, IReadOnlyList records, LoginDTO login, CancellationToken ct = default); // The actual per-record evaluation loop. Long-running -- always called from a // background Task against a fresh DI scope's services, never awaited inline by // an HTTP request. Task ExecuteBulkRunAsync( int qualifierBulkRunId, int qualifierId, string entityCode, byte stage, byte scope, IReadOnlyList records, LoginDTO login, CancellationToken ct); Task> GetHistoryAsync(string entityCode, int page, int pageSize, LoginDTO login, CancellationToken ct = default); Task GetDetailAsync(int qualifierBulkRunId, LoginDTO login, CancellationToken ct = default); Task> GetFindingsAsync(int qualifierBulkRunId, byte? severity, int page, int pageSize, LoginDTO login, CancellationToken ct = default); } }