예제 #1
0
        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));
        }
예제 #2
0
        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());
        }