Esempio n. 1
0
        public async Task <IActionResult> RegisterAsync([FromBody] RegisterEmailCreateModel model)
        {
            var res = await _authenticationService.RegisterByEmailAsync(model);

            if (res.IsSuccessed)
            {
                return(ReturnOk(null));
            }
            return(ReturnBadRequest(res.Error));
        }
        public async Task <Result <RegisterEmailCreateModel> > RegisterByEmailAsync(RegisterEmailCreateModel model)
        {
            if (await IsExistUserAsync(model.Login))
            {
                return(new Result <RegisterEmailCreateModel>("User is already exist"));
            }

            if (await IsUsernameBusyAsync(model.Username))
            {
                return(new Result <RegisterEmailCreateModel>("Username is busy"));
            }

            var newUser = new User
            {
                CreatedAt = DateTime.Now,
                Name      = model.Name,
                Username  = model.Username,
                About     = model.About
            };
            var newUserLogin = new UserLogin
            {
                CreatedAt          = DateTime.Now,
                CreatedBy          = "s",
                IsConfirm          = false,
                Type               = UserLoginType.Email,
                TokenConfirm       = RandomGenerator.GetString(50, IsLowwer: true),
                Version            = 0,
                Login              = model.Login,
                PasswordHash       = model.Password.GeneratePasswordHash(),
                User               = newUser,
                RegisterFromDevice = _detectClient.GetClientInfo(model)
            };

            //todo create notification

            //todo send confirmation account to email

            await _db.UserLogins.AddAsync(newUserLogin);

            await _db.SaveChangesAsync();

            if (newUserLogin.User.Id == 1)
            {
                await _db.UserRoles.AddAsync(new UserRole
                {
                    UserId = newUserLogin.User.Id,
                    RoleId = 1
                });

                await _db.SaveChangesAsync();
            }
            else
            {
                await _db.UserRoles.AddAsync(new UserRole
                {
                    UserId = newUserLogin.User.Id,
                    RoleId = 3
                });

                await _db.SaveChangesAsync();
            }

            return(new Result <RegisterEmailCreateModel>());
        }