Example #1
0
        public async Task <IActionResult> Update(Guid id, [FromBody] AdminUpdateUserDto adminUpdateUserDto)
        {
            adminUpdateUserDto.Id = id;
            var result = await _unitOfWork.UserService.UpdateProfile(adminUpdateUserDto);

            if (!result.Success)
            {
                return(result.ApiResult);
            }
            return(NoContent());
        }
Example #2
0
        public async Task <Result> UpdateProfile(AdminUpdateUserDto adminUpdateUserDto)
        {
            var user = await FirstOrDefaultAsync(u => u.Id == adminUpdateUserDto.Id, u => u.UserWallet,
                                                 u => u.UserInRoles.Select(ur => ur.Role));

            if (user == null)
            {
                return(Result.Failed(new NotFoundObjectResult(new ApiMessage
                {
                    Message = ResponseMessage.UserNotFound
                })));
            }

            _mapper.Map(adminUpdateUserDto, user);

            if (!user.UserInRoles.Select(g => g.RoleId).SequenceEqual(adminUpdateUserDto.Roles))
            {
                // get all roles that are removed
                var removeRoles = user.UserInRoles
                                  .Where(ur => !adminUpdateUserDto.Roles.Contains(ur.RoleId)).ToList();
                if (removeRoles.Any())
                {
                    Context.UserInRoles.RemoveRange(removeRoles);
                }

                // get all roles id that are added
                var addedRolesId = adminUpdateUserDto.Roles.Where(roleId =>
                                                                  !user.UserInRoles.Select(u => u.RoleId).Contains(roleId)).ToList();
                var addedRoles = await Context.Roles.Where(u => addedRolesId.Contains(u.Id)).ToListAsync();

                // if invalid role id sent
                if (addedRoles.Count != addedRolesId.Count)
                {
                    return(Result.Failed(new BadRequestObjectResult(new ApiMessage
                    {
                        Message = ResponseMessage.RoleNotFound
                    })));
                }

                var addedUserRoles = addedRoles.Select(role => new UserInRole
                {
                    Id = Guid.NewGuid(), Role = role, User = user
                }).ToList();

                if (addedUserRoles.Any())
                {
                    await Context.UserInRoles.AddRangeAsync(addedUserRoles);
                }

                user.UserInRoles = addedUserRoles.Union(user.UserInRoles.Where(ur =>
                                                                               !addedRolesId.Contains(ur.RoleId) && !removeRoles.Select(rr => rr.RoleId).Contains(ur.RoleId)))
                                   .ToList();
            }

            // if (!string.IsNullOrEmpty(adminUpdateUserDto.Password))
            // user.Password = StringUtil.HashPass(adminUpdateUserDto.Password);

            await Context.SaveChangesAsync();

            return(Result.SuccessFull());
        }