public async Task <IActionResult> Upsert(
            [FromRoute] Guid id,
            [FromBody] JsonPatchDocument <API.Models.v1.Request.PartiallyUpsertUserRequest> patchDocument)
        {
            if (patchDocument == null)
            {
                return(BadRequest());
            }

            var partiallyUpsertUserRequest = new PartiallyUpsertUserRequest(id);

            patchDocument.ApplyTo(partiallyUpsertUserRequest, ModelState);
            if (!TryValidateModel(partiallyUpsertUserRequest))
            {
                return(ValidationProblem(ModelState));
            }

            if (await DoesUserExist(id))
            {
                var updatedUser = await PartiallyUpdateUser(id, partiallyUpsertUserRequest);

                return(Ok(updatedUser));
            }

            var createUserRequest = _mapper.Map <PartiallyUpsertUserRequest>(partiallyUpsertUserRequest);

            return(RedirectToAction(nameof(Add), createUserRequest));
        }
Beispiel #2
0
        public void PartiallyUpsertUserRequest_To_PartiallyUpdateUserCommand()
        {
            // Arrange...
            var configuration = new MapperConfiguration(configure =>
            {
                configure.AddProfile <PartiallyUpsertUserRequestToPartiallyUpdateUserCommand>();
            });
            var sut       = configuration.CreateMapper();
            var userId    = _fixture.Create <Guid>();
            var firstName = _fixture.Create <string>();
            var partiallyUpsertUserRequest = new PartiallyUpsertUserRequest(userId)
            {
                FirstName = firstName
            };

            // Act...
            var partiallyUpdateUserCommand = sut.Map <PartiallyUpdateUserCommand>(partiallyUpsertUserRequest);

            // Assert...
            partiallyUpdateUserCommand.Id.Should().Be(userId);
            partiallyUpdateUserCommand.Title.Should().BeNull();
            partiallyUpdateUserCommand.FirstName.Should().Be(firstName);
            partiallyUpdateUserCommand.LastName.Should().BeNull();
            partiallyUpdateUserCommand.Sex.Should().BeNull();
        }
        public void TryValidateModel()
        {
            // Arrange...
            var mockMediator = Substitute.For <IMediator>();
            var mockMapper   = Substitute.For <IMapper>();
            var sut          = new UsersController(mockMediator, mockMapper);

            sut.ObjectValidator = Substitute.For <IObjectModelValidator>();
            var userId = _fixture.Create <Guid>();
            var partiallyUpsertUserRequest = new PartiallyUpsertUserRequest(userId);

            // Act...
            var result = sut.TryValidateModel(partiallyUpsertUserRequest);

            // Assert...
        }
        private async Task <API.Models.v1.Response.UserResponse> PartiallyUpdateUser(
            Guid userId,
            PartiallyUpsertUserRequest partiallyUpsertUserRequest)
        {
            if (partiallyUpsertUserRequest == null)
            {
                throw new ArgumentNullException(nameof(partiallyUpsertUserRequest));
            }

            var partiallyUpdateUserCommand = _mapper.Map <PartiallyUpdateUserCommand>(partiallyUpsertUserRequest);

            var updatedUser = await _mediator.Send(partiallyUpdateUserCommand);

            var updatedUserResponse = _mapper.Map <UserResponse>(updatedUser);

            return(updatedUserResponse);
        }