public async Task <User> Create(UserCreateInDto createParams) { #region create_user_if_existed_check var existed = await _context.Users.AnyAsync(u => u.Name == createParams.Name); if (existed) { return(await Task.FromException <User>(new ExistedConflictException())); } #endregion #region create_user using (var transaction = await _context.Database.BeginTransactionAsync()) { var createTime = DateTime.Now; var newUser = new User { Name = createParams.Name, CreateTime = createTime, UpdateTime = createTime, Password = string.Empty // here has not generated Id, thus cannot generate password }; newUser.Description = GetDefaultDescription(newUser); newUser.Avatar = _avatarService.GetDefaultAvatar(newUser); newUser.Url = _urlService.GetDefaultUrl(newUser); await _context.AddAsync(newUser); await _context.SaveChangesAsync(); newUser.Password = _passwordHasher.HashPassword(newUser.Id.ToString(), createParams.Password); var newUserProfile = new UserProfile { Id = newUser.Id, Misc = _profileService.GetDefaultMisc(newUser), Setting = _profileService.GetDefaultSetting(newUser), }; newUser.Profile = newUserProfile; await _context.AddAsync(newUserProfile); await _context.SaveChangesAsync(); await _roleService.AddRolePlayerWithoutCheck(newUser.Id, _roleService.GetDefaultId()); transaction.Commit(); return(newUser); } #endregion }
public async Task <ActionResult <ResultOutDto <User> > > PostUser([FromBody] UserCreateInDto createOptions) { try { var user = await _userService.Create(createOptions); return(Ok(ResultOutDtoBuilder.Success(user))); } catch (ExistedConflictException e) { return(Conflict(ResultOutDtoBuilder.Fail <User>(e, "New name conflict with other existed user."))); } }