Ejemplo n.º 1
0
        public async Task <BaseModel> EditAsync(UserModelItem model, long adminId)
        {
            var response     = new BaseModel();
            var existingUser = await _userRepository.GetByIdAsync(model.Id);

            if (existingUser == null)
            {
                response.Errors.Add(ErrorConstants.ImpossibleToFindUser);
                return(response);
            }
            var admin = await _userRepository.GetByIdAsync(adminId);

            if (admin == null)
            {
                response.Errors.Add(ErrorConstants.ImpossibleToFindUser);
                return(response);
            }
            var adminRole = await _userRepository.GetRoleAsync(admin);

            var userRole = await _userRepository.GetRoleAsync(existingUser);

            var updatedUser = new ApplicationUser();

            if (adminRole == RoleConstants.Admin)
            {
                updatedUser = UserMapper.EditEntityByAdminRole(existingUser, model);
            }
            if (adminRole == userRole)
            {
                updatedUser = UserMapper.EditEntityByUserRole(existingUser, model);
            }
            var result = await _userRepository.UpdateAsync(updatedUser);

            if (!result)
            {
                response.Errors.Add(ErrorConstants.ImpossibleToUpdateUser);
                return(response);
            }
            if (!string.IsNullOrWhiteSpace(model.NewPassword) && adminRole == userRole)
            {
                result = await _userRepository.ChangePasswordAsync(updatedUser, model.OldPassword, model.NewPassword);
            }
            if (!result)
            {
                response.Errors.Add(ErrorConstants.ImpossibleToChangeUserPassword);
            }
            return(response);
        }