using FMDAL.DTO.ScanSession; using FMDAL.Query.ScanSession; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using System; using System.Collections.Generic; using System.Data.Common; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace FMDAL.CustomCode.ScanSession { public class ScanSessionDAL : IScanSessionDAL { private readonly IQueryExecutor _qe; public ScanSessionDAL(IQueryExecutor qe) => _qe = qe; public async Task GetScanSession(int scanSessionId, LoginDTO login, CancellationToken ct) { var items = await _qe.QueryAsync(login, ScanSessionQB.GET_SCANSESSION, new { ScanSessionId = scanSessionId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); return items.FirstOrDefault(); } public async Task SaveScanSession(ScanSessionDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct) { dto.TenantId = login.ClientId; dto.CreatedOn = DateTime.UtcNow; dto.CreatedById = login.UserId; dto.ModifiedById = login.UserId; dto.ModifiedOn = DateTime.UtcNow; await _qe.ExecuteAsync(login, ScanSessionQB.SAVE_SCANSESSION, dto, tx, cancellationToken: ct).ConfigureAwait(false); } public async Task GetScanEventCountsBySession(int scanSessionId, LoginDTO login, CancellationToken ct) { return await _qe.QuerySingleAsync(login, ScanSessionQB.GET_SCANEVENT_COUNTS_BY_SESSION, new { ScanSessionId = scanSessionId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); } public async Task ConfirmScanSession(int scanSessionId, ScanSessionCountsDTO counts, int modifiedById, LoginDTO login, DbTransaction tx, CancellationToken ct) { return await _qe.ExecuteAsync(login, ScanSessionQB.CONFIRM_SCANSESSION, new { ScanSessionId = scanSessionId, TenantId = login.ClientId, counts.TotalScanned, counts.TotalAccepted, counts.TotalRejected, ModifiedById = modifiedById }, tx, cancellationToken: ct).ConfigureAwait(false); } public async Task CancelScanSession(int scanSessionId, int modifiedById, LoginDTO login, DbTransaction tx, CancellationToken ct) { return await _qe.ExecuteAsync(login, ScanSessionQB.CANCEL_SCANSESSION, new { ScanSessionId = scanSessionId, TenantId = login.ClientId, ModifiedById = modifiedById }, tx, cancellationToken: ct).ConfigureAwait(false); } } }