public IHttpActionResult GetUsers([FromUri] AdminGetUsersBindingModel model) { // Validate the input parameters if (!ModelState.IsValid) { return(this.BadRequest(this.ModelState)); } // Select all users, ordered by the specified column var users = this.Data.Users.All(); if (model.OrderByColumn != null) { if (model.SortDirection.HasValue && model.SortDirection == SortDirection.Ascending) { users = users.OrderBy(model.OrderByColumn); } else { users = users.OrderByDescending(model.OrderByColumn); } } // Find the requested page (by given start page and page size) int pageSize = Settings.Default.DefaultPageSize; if (model.PageSize.HasValue) { pageSize = model.PageSize.Value; } var numPages = (users.Count() + pageSize - 1) / pageSize; if (model.StartPage.HasValue) { users = users.Skip(pageSize * (model.StartPage.Value - 1)); } users = users.Take(pageSize); // Select the columns to be returned var usersToReturn = users.ToList().Select(u => new { id = u.Id, username = u.UserName, name = u.Name, email = u.Email, phoneNumber = u.PhoneNumber }); return(this.Ok( new { numPages, users = usersToReturn } )); }
public IHttpActionResult GetUsers([FromUri] AdminGetUsersBindingModel model) { if (model == null) { // When no parameters are passed, the model is null, so we create an empty model model = new AdminGetUsersBindingModel(); } // Validate the input parameters if (!ModelState.IsValid) { return(this.BadRequest(this.ModelState)); } // Select all users along with their roles var users = this.Data.Users.All().Include(u => u.Roles).Include(u => u.Town); // Apply sorting by the specified column / expression (prefix '-' for descending) if (model.SortBy != null) { try { // Apply custom sorting order by the specified column / expression if (model.SortBy.StartsWith("-")) { users = users.OrderByDescending(model.SortBy.Substring(1)).ThenBy(u => u.Id); } else { users = users.OrderBy(model.SortBy).ThenBy(u => u.Id); } } catch (Exception) { return(this.BadRequest("Invalid sorting expression: " + model.SortBy)); } } else { // Apply the default sorting order: by username users = users.OrderBy(u => u.UserName).ThenBy(u => u.Id); } // Apply paging: find the requested page (by given start page and page size) int pageSize = Settings.Default.DefaultPageSize; if (model.PageSize.HasValue) { pageSize = model.PageSize.Value; } var numItems = users.Count(); var numPages = (numItems + pageSize - 1) / pageSize; if (model.StartPage.HasValue) { users = users.Skip(pageSize * (model.StartPage.Value - 1)); } users = users.Take(pageSize); // Select the admin role ID var adminRoleId = this.Data.UserRoles.All().First(r => r.Name == "Administrator").Id; // Select the columns to be returned var usersToReturn = users.ToList().Select(u => new { id = u.Id, username = u.UserName, name = u.Name, email = u.Email, phoneNumber = u.PhoneNumber, townId = u.TownId, townName = u.TownId != null ? u.Town.Name : null, isAdmin = u.Roles.Any(r => r.RoleId == adminRoleId) }); return(this.Ok( new { numItems, numPages, users = usersToReturn } )); }