예제 #1
0
        public async Task <RegisterResult> RegisterVk(RegisterVkModel registerModel)
        {
            if (registerModel == null || registerModel.Id == 0 || String.IsNullOrEmpty(registerModel.AccessToken) ||
                !(await CheckVkToken(registerModel)))
            {
                return(new RegisterResult(OperationResultStatus.Error, "Wrong Vk data"));
            }

            var identity = new UserIdentity
            {
                VkIdentity = registerModel.GetVkIdentity(),
                Device     = registerModel.Device
            };
            var result = await _identityService.AddUserIdentity(identity);

            if (result.Status == OperationResultStatus.Error)
            {
                return(RegisterResult.FromIdResult(result));
            }

            RegisterResult registerResult;

            if (result.Status == OperationResultStatus.Success)
            {
                var user = new User {
                    Id = result.Id
                };
                registerModel.FillUserFields(user);
                registerResult = RegisterResult.FromIdResult(await _userService.AddNewUser(user));
                if (registerResult.Status != OperationResultStatus.Success)
                {
                    return(registerResult);
                }

                var neededFields = user.CheckImportantFields();
                if (neededFields.Any())
                {
                    registerResult.Status      = OperationResultStatus.Warning;
                    registerResult.Description = neededFields.JoinToString();
                }

                await _appCountersService.UserRegistered();
            }
            else //warning, user exists
            {
                registerResult = new RegisterResult(result.Id);
            }

            if (Request != null)
            {
                SignInRequest(registerResult);
            }

            return(registerResult);
        }