コード例 #1
0
        public async Task <IActionResult> PostAccount([FromBody] AccountPostModel model)
        {
            Guid userId = model.Id;

            try
            {
                await _commandBus.Send(new RegisterUserCommand
                {
                    Id              = userId,
                    BaseUrl         = BaseUrl.Current,
                    LoginName       = model.LoginName,
                    Name            = model.Name,
                    Surname         = model.Surname,
                    Email           = model.Email,
                    Password        = model.Password,
                    TelephoneNumber = model.TelephoneNumber
                });
            }
            catch (LoginNameAlreadyUsedException ex)
            {
                //ModelState.AddModelError(); // todo think about it
                ModelStateDictionary mds = new ModelStateDictionary();
                mds.AddModelError(nameof(ex.LoginName), $"The provided username {ex.LoginName} already exists");
                return(Conflict(mds));
            }

            return(Created(new Uri($"{BaseUrl.Current}/api/v1.0/confirmations/{userId}"), userId));
        }
コード例 #2
0
        public async void UserCreationProcessTests_ShouldFailWhenUserNameIsNotUniqueAndRegistrationProcessIsNotComplete()
        {
            // Setup
            InMemoryAccountsRepository inMemoryAccountsRepository = new InMemoryAccountsRepository();

            Bootstrap.Run(new string[0], builder =>
            {
                builder.RegisterInstance(inMemoryAccountsRepository).AsImplementedInterfaces().SingleInstance();
            }, "IntegrationTesting");

            Guid             userId           = Guid.NewGuid();
            AccountPostModel accountPostModel = CreatePostAccountModel(userId);

            // Act
            using (Response <string> response = await RestClient.For <IAccountsApi>(Url).PostAccount(accountPostModel))
            {
                Assert.True(response.ResponseMessage.IsSuccessStatusCode);
                HttpResponseHeaders responseMessageHeaders = response.ResponseMessage.Headers;
                Assert.True(responseMessageHeaders.Location.IsAbsoluteUri);
            }

            using (Response <ModelStateDictionary> response = await RestClient.For <IAccountsApi>(Url).PostAccountError(accountPostModel))
            {
                Assert.False(response.ResponseMessage.IsSuccessStatusCode);
                Dictionary <string, string[]> deserializeObject = JsonConvert.DeserializeObject <Dictionary <string, string[]> >(response.StringContent);
                Assert.Equal($"The provided username {accountPostModel.LoginName} already exists", deserializeObject["LoginName"][0]);
            }
        }
コード例 #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="accountPostModel"></param>
        /// <returns></returns>
        public async Task <ServiceResponse <AccountModel> > PostAccount(AccountPostModel accountPostModel)
        {
            try
            {
                //TODO: Create POST logic.
                //



                return(null);
            }
            catch (Exception e)
            {
                return(new ServiceResponse <AccountModel>
                {
                    ErrorCode = HttpStatusCode.InternalServerError,
                    ErrorDescription = "Internal Server Error"
                });
            }
        }
コード例 #4
0
        public async void UserCreationProcessTests()
        {
            // Setup
            InMemoryAccountsRepository inMemoryAccountsRepository = new InMemoryAccountsRepository();

            Bootstrap.Run(new string[0], builder =>
            {
                builder.RegisterInstance(inMemoryAccountsRepository).AsImplementedInterfaces().SingleInstance();
            }, "IntegrationTesting");

            Guid             userId           = Guid.NewGuid();
            AccountPostModel accountPostModel = CreatePostAccountModel(userId);

            // Act
            HttpResponseHeaders responseMessageHeaders;

            using (Response <string> response = await RestClient.For <IAccountsApi>(Url).PostAccount(accountPostModel))
            {
                Assert.True(response.ResponseMessage.IsSuccessStatusCode);
                responseMessageHeaders = response.ResponseMessage.Headers;
                Assert.True(responseMessageHeaders.Location.IsAbsoluteUri);
            }

            using (Response <string> response = await RestClient.For <IConfirmationApi>(responseMessageHeaders.Location)
                                                .PutConfirmation(new ConfirmationPutModel {
                Confirmed = true
            }))
            {
                Assert.True(response.ResponseMessage.IsSuccessStatusCode);
            }

            using (Response <AccountReadModel> response = await RestClient.For <IAccountsApi>(Url).GetAccount(userId))
            {
                Assert.True(response.ResponseMessage.IsSuccessStatusCode);
                AccountReadModel accountReadModel = response.GetContent();
                Assert.Equal(accountPostModel.LoginName, accountReadModel.LoginName);
                Assert.Equal(accountPostModel.Name, accountReadModel.Name);
                Assert.Equal(accountPostModel.Surname, accountReadModel.Surname);
            }
        }
コード例 #5
0
        public async Task <IActionResult> Post([FromBody] AccountPostModel model)
        {
            if (await UserManager.Users.AnyAsync(x => x.Email == model.Email))
            {
                return(BadRequest(new ApiErrorResult <ApiError>(new ApiError(ApiErrorCodes.BadArgument, "重复的用户信息。")
                {
                    Details = new List <ApiError>
                    {
                        new ApiError(ApiErrorCodes.BadArgument, "该邮箱已被注册。")
                        {
                            Target = "email"
                        }
                    }
                })));
            }

            var id = await IdentityGenerator.GenerateAsync();

            var result = await UserManager.CreateAsync(new User
            {
                Id       = id,
                Email    = model.Email,
                UserName = model.Email,
                Name     = model.Name,
                Avatar   = PrimarySettings.DefaultAvatar
            }, model.Password);

            if (result.Succeeded)
            {
                Logger.LogInformation("账户创建成功");
                return(StatusCode(201, new ApiResult <ObjectCreationOutputModel <long> >(new ObjectCreationOutputModel <long>(id,
                                                                                                                              $"{Request.Scheme}://{Request.Host.Value}/api/accounts/{id}"))));
            }

            return(BadRequest(new ApiErrorResult <ApiError>(new ApiError(ApiErrorCodes.BadArgument, "意外的错误,请重试。"))));
        }
コード例 #6
0
 public async Task <ActionResult <AccountModel> > PostAccount(AccountPostModel accountPostModel)
 {
     return(Ok());
 }