using System.Threading; using System.Threading.Tasks; using DMSDAL.DTO.BulkIngestion; using DMSDAL.Query.BulkIngestion; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace DMSDAL.CustomCode.BulkIngestion { public class BulkIngestionDAL : IBulkIngestionDAL { private readonly IQueryExecutor _qe; public BulkIngestionDAL(IQueryExecutor qe) => _qe = qe; public async Task InsertJobAsync( BulkIngestionJobDTO job, LoginDTO login, CancellationToken ct = default) => await _qe.ExecuteScalarAsync( login, BulkIngestionQB.INSERT_JOB, new { job.SourceFolder, job.ManifestFilePath, job.DocumentSetDetailId, job.Mode, login.ClientId, job.CreatedByUserId }, cancellationToken: ct).ConfigureAwait(false); public async Task UpdateJobStatusAsync( int jobId, byte status, int totalFiles, int processedFiles, int failedFiles, LoginDTO login, CancellationToken ct = default) => await _qe.ExecuteAsync( login, BulkIngestionQB.UPDATE_JOB_STATUS, new { JobId = jobId, Status = status, TotalFiles = totalFiles, ProcessedFiles = processedFiles, FailedFiles = failedFiles }, cancellationToken: ct).ConfigureAwait(false); public async Task GetJobStatusAsync( int jobId, LoginDTO login, CancellationToken ct = default) => await _qe.QuerySingleAsync( login, BulkIngestionQB.GET_JOB_STATUS, new { JobId = jobId, login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task InsertLogAsync( int jobId, string filePath, int objectTypeId, int objectId, int documentSetDetailId, string? displayName, int? attachmentId, byte status, string? errorMessage, LoginDTO login, CancellationToken ct = default) => await _qe.ExecuteAsync( login, BulkIngestionQB.INSERT_LOG, new { JobId = jobId, FilePath = filePath, ObjectTypeId = objectTypeId, ObjectId = objectId, DocumentSetDetailId = documentSetDetailId, DisplayName = displayName, AttachmentId = attachmentId, Status = status, ErrorMessage = errorMessage }, cancellationToken: ct).ConfigureAwait(false); public async Task GetObjectTypeIdByCodeAsync( string entityCode, LoginDTO login, CancellationToken ct = default) { var id = await _qe.ExecuteScalarAsync( login, BulkIngestionQB.GET_OBJECTTYPEID_BY_CODE, new { Code = entityCode }, cancellationToken: ct).ConfigureAwait(false); return id; } } }