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 ClientUserDAL : IClientUserDAL { private readonly IQueryExecutor _QueryExecutor; public ClientUserDAL(IQueryExecutor queryExecutor) => _QueryExecutor = queryExecutor; public async Task GetByIdAsync(int clientUserId, LoginDTO login, CancellationToken ct) => await _QueryExecutor.QuerySingleAsync( login, ClientUserQB.GET_BY_ID, new { ClientUserId = clientUserId }, cancellationToken: ct).ConfigureAwait(false); public async Task GetByClientAndEmailAsync(int clientId, string email, LoginDTO login, CancellationToken ct) => await _QueryExecutor.QuerySingleAsync( login, ClientUserQB.GET_BY_CLIENT_AND_EMAIL, new { ClientId = clientId, Email = email }, cancellationToken: ct).ConfigureAwait(false); public async Task SaveAsync(ClientUserDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct) => await _QueryExecutor.ExecuteAsync(login, ClientUserQB.INSERT, dto, tx, cancellationToken: ct).ConfigureAwait(false); public async Task UpdateFailedLoginCountAsync(int clientUserId, short failedLoginCount, LoginDTO login, DbTransaction tx, CancellationToken ct) => await _QueryExecutor.ExecuteAsync(login, ClientUserQB.UPDATE_FAILED_LOGIN_COUNT, new { ClientUserId = clientUserId, FailedLoginCount = failedLoginCount, ModifiedById = login.UserId, ModifiedOn = DateTime.UtcNow }, tx, cancellationToken: ct).ConfigureAwait(false); public async Task UpdateStatusAsync(int clientUserId, byte status, LoginDTO login, DbTransaction tx, CancellationToken ct) => await _QueryExecutor.ExecuteAsync(login, ClientUserQB.UPDATE_STATUS, new { ClientUserId = clientUserId, Status = status, ModifiedById = login.UserId, ModifiedOn = DateTime.UtcNow }, tx, cancellationToken: ct).ConfigureAwait(false); public async Task UpdateLastLoginOnAsync(int clientUserId, DateTime lastLoginOn, LoginDTO login, DbTransaction tx, CancellationToken ct) => await _QueryExecutor.ExecuteAsync(login, ClientUserQB.UPDATE_LAST_LOGIN_ON, new { ClientUserId = clientUserId, LastLoginOn = lastLoginOn, ModifiedById = login.UserId, ModifiedOn = DateTime.UtcNow }, tx, cancellationToken: ct).ConfigureAwait(false); public async Task UpdatePasswordHashAsync(int clientUserId, string passwordHash, LoginDTO login, DbTransaction tx, CancellationToken ct) => await _QueryExecutor.ExecuteAsync(login, ClientUserQB.UPDATE_PASSWORD_HASH, new { ClientUserId = clientUserId, PasswordHash = passwordHash, ModifiedById = login.UserId, ModifiedOn = DateTime.UtcNow }, tx, cancellationToken: ct).ConfigureAwait(false); public async Task UpdateStatusAndFailedLoginCountAsync(int clientUserId, byte status, short failedLoginCount, LoginDTO login, DbTransaction tx, CancellationToken ct) => await _QueryExecutor.ExecuteAsync(login, ClientUserQB.UPDATE_STATUS_AND_FAILED_LOGIN_COUNT, new { ClientUserId = clientUserId, Status = status, FailedLoginCount = failedLoginCount, ModifiedById = login.UserId, ModifiedOn = DateTime.UtcNow }, tx, cancellationToken: ct).ConfigureAwait(false); }