using System.Data.Common; using EntitlementDAL.DTOs; using GB5Shared.DTO.Framework.Login; namespace EntitlementDAL.Interfaces; public interface IClientUserDAL { Task GetByIdAsync(int clientUserId, LoginDTO login, CancellationToken ct); Task GetByClientAndEmailAsync(int clientId, string email, LoginDTO login, CancellationToken ct); Task SaveAsync(ClientUserDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct); Task UpdateFailedLoginCountAsync(int clientUserId, short failedLoginCount, LoginDTO login, DbTransaction tx, CancellationToken ct); Task UpdateStatusAsync(int clientUserId, byte status, LoginDTO login, DbTransaction tx, CancellationToken ct); Task UpdateLastLoginOnAsync(int clientUserId, DateTime lastLoginOn, LoginDTO login, DbTransaction tx, CancellationToken ct); Task UpdatePasswordHashAsync(int clientUserId, string passwordHash, LoginDTO login, DbTransaction tx, CancellationToken ct); /// Atomically sets both STATUS and FAILEDLOGINCOUNT in one UPDATE — used both by the /// login-lockout path (flips to Locked once the threshold is reached) and by reactivation /// (flips back to Active while resetting the counter to 0). Task UpdateStatusAndFailedLoginCountAsync(int clientUserId, byte status, short failedLoginCount, LoginDTO login, DbTransaction tx, CancellationToken ct); }