Exemple #1
0
        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
        }
Exemple #2
0
        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.")));
            }
        }