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

            if (await DoesUserExist(id))
            {
                var updatedUser = await UpdateUser(id, upsertUserRequest);

                return(Ok(updatedUser));
            }

            var createUserRequest = _mapper.Map <CreateUserRequest>(upsertUserRequest);

            return(RedirectToAction(nameof(Add), createUserRequest));
        }
        private async Task <UserResponse> UpdateUser(
            Guid userId,
            API.Models.v1.Request.UpsertUserRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            // ToDo
            // Are we updating or creating?
            // We need to check if a user with the given identifier exists.
            // If it does, we are updating, if it does not, we are creating.

            var updateUserCommand = _mapper.Map <UpdateUserCommand>(request);

            updateUserCommand.Id = userId;

            var updatedUser = await _mediator.Send(updateUserCommand);

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

            return(updatedUserResponse);
        }