using System.Data.Common; using EntitlementDAL.DTOs; using EntitlementDAL.Interfaces; using EntitlementDAL.QueryBuilders; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace EntitlementDAL.Implementations; public class BetaClientDAL : IBetaClientDAL { private readonly IQueryExecutor _QueryExecutor; public BetaClientDAL(IQueryExecutor queryExecutor) => _QueryExecutor = queryExecutor; public async Task> GetListAsync(LoginDTO login, CancellationToken ct) => await _QueryExecutor.QueryAsync( login, BetaClientQB.GET_LIST, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); public async Task> GetListByClientAsync(int clientId, LoginDTO login, CancellationToken ct) => await _QueryExecutor.QueryAsync( login, BetaClientQB.GET_LIST_BY_CLIENT, new { ClientId = clientId }, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); public async Task> GetOpenProgramsAsync(DateTime now, LoginDTO login, CancellationToken ct) => await _QueryExecutor.QueryAsync( login, BetaClientQB.GET_OPEN_PROGRAMS, new { Now = now }, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); public async Task IsClientInProgramAsync(int clientId, string betaProgramName, DateTime now, LoginDTO login, CancellationToken ct) { var count = await _QueryExecutor.ExecuteScalarAsync( login, BetaClientQB.IS_CLIENT_IN_PROGRAM, new { ClientId = clientId, BetaProgramName = betaProgramName, Now = now }, cancellationToken: ct).ConfigureAwait(false); return count > 0; } public async Task SaveAsync(BetaClientDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct) => await _QueryExecutor.ExecuteAsync(login, BetaClientQB.INSERT, dto, tx, cancellationToken: ct).ConfigureAwait(false); public async Task DeleteAsync(int betaClientId, LoginDTO login, DbTransaction tx, CancellationToken ct) => await _QueryExecutor.ExecuteAsync(login, BetaClientQB.DELETE, new { BetaClientId = betaClientId, ModifiedById = login.UserId, ModifiedOn = DateTime.UtcNow }, tx, cancellationToken: ct).ConfigureAwait(false); public async Task> GetExpiredActiveAsync(DateTime now, LoginDTO login, CancellationToken ct) => await _QueryExecutor.QueryAsync( login, BetaClientQB.GET_EXPIRED_ACTIVE, new { Now = now }, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); public async Task GetByClientAndProgramAsync(int clientId, string betaProgramName, LoginDTO login, CancellationToken ct) => await _QueryExecutor.QuerySingleAsync( login, BetaClientQB.GET_BY_CLIENT_AND_PROGRAM, new { ClientId = clientId, BetaProgramName = betaProgramName }, cancellationToken: ct).ConfigureAwait(false); public async Task ReactivateAsync(int betaClientId, DateTime validFrom, DateTime validUntil, LoginDTO login, DbTransaction tx, CancellationToken ct) => await _QueryExecutor.ExecuteAsync(login, BetaClientQB.REACTIVATE, new { BetaClientId = betaClientId, ValidFrom = validFrom, ValidUntil = validUntil, ModifiedById = login.UserId, ModifiedOn = DateTime.UtcNow }, tx, cancellationToken: ct).ConfigureAwait(false); }