public async Task <IActionResult> ListUsers([FromQuery] ListUsersModel model) { var page = Math.Max(model.Page ?? 1, 1); var size = Math.Min(model.Size ?? 50, 50); var query = _context.Users.AsQueryable(); if (!string.IsNullOrEmpty(model.Search)) { query = query.Where(u => (u.EmailAddress + " " + u.FirstName + " " + u.LastName).Contains(model.Search)); } var count = await query.CountAsync(); query = model.Sort switch { UserSort.EmailAddressDesc => query.OrderByDescending(r => r.EmailAddress), UserSort.EmailAddressAsc => query.OrderBy(r => r.EmailAddress), UserSort.NameDesc => query.OrderByDescending(r => r.FirstName).ThenByDescending(r => r.LastName), _ => query.OrderBy(r => r.FirstName).ThenBy(r => r.LastName), }; if (page > 1) { query = query.Skip((page - 1) * size); } query = query.Take(size); var users = await query .Select(user => new GetUserResponse { Id = user.Id, EmailAddress = user.EmailAddress, FirstName = user.FirstName, LastName = user.LastName, DateOfBirth = user.DateOfBirth.ToUniversalTime(), IsLockedOut = user.IsLockedOut, Roles = user.UserRoles .Select(ur => ur.Role.Name) .ToList() }) .ToListAsync(); var pageCount = (count + size - 1) / size; var result = new ListUsersResponse { Items = users, HasNextPage = page < pageCount, HasPreviousPage = page > 1 }; return(Generate(HttpStatusCode.OK, result)); }
public async Task <IActionResult> Login(LoginUserModel model) { User user = await this.userManager.FindByNameAsync(model.Username); if (user == null) { return(NotFound("Something went wrong")); } Microsoft.AspNetCore.Identity.SignInResult result = await this.signInManager.CheckPasswordSignInAsync(user, model.Password, false); if (result.Succeeded) { ListUsersModel navbarUser = mapper.Map <ListUsersModel>(user); return(Ok(new { token = GenerateJWTToken(user).Result, navbarUser })); } return(Unauthorized()); }