public static async Task <User> FindByEmailAsync(this IUsersRepository users, string email, CancellationToken cancellationToken = default) { email = email.Any(x => !char.IsUpper(x)) ? email.ToUpperInvariant() : email; cancellationToken.ThrowIfCancellationRequested(); return(await users.ProcessFirstOrDefaultAsync( users.AsQueryable() .Where(x => x.NormalizedEmail == email), cancellationToken)); }
public static async Task <IReadOnlyCollection <User> > GetUsersForClaimAsync( this IUsersClaimsRepository usersClaims, Claim claim, IUsersRepository users, CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); return(await users.ProcessQueryAsync( usersClaims.AsQueryable() .Where(userClaim => userClaim.ClaimValue == claim.Value && userClaim.ClaimType == claim.Type) .Join(users.AsQueryable(), userClaim => userClaim.UserId, user => user.Id, (userClaim, user) => user), cancellationToken)); }
public static async Task <IReadOnlyCollection <User> > GetUsersInRoleAsync(this IUsersRolesRepository usersRoles, string roleName, IRolesRepository roles, IUsersRepository users, CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); var role = await roles.FindByNameAsync(roleName, false, cancellationToken); var userIdCollection = (await usersRoles.ProcessQueryAsync(usersRoles.AsQueryable().Where(x => x.RoleId == role.Id), cancellationToken)).Select(x => x.UserId); return(await users.ProcessQueryAsync(users.AsQueryable().Where( user => userIdCollection.Contains(user.Id)), cancellationToken)); }