public async Task <HttpResponseData> Patch(
            [HttpTrigger(AuthorizationLevel.Anonymous, "patch", Route = "users/me")] HttpRequestData req)
        {
            // Verify authenticated user is present
            var subject = await authorize.TryGetSubject(req.Headers);

            if (subject == null)
            {
                return(req.CreateResponse(HttpStatusCode.Unauthorized));
            }

            var(user, errorResponse) = await DeserializeAndValidateBody <UserPatchDto>(req);

            if (user == null)
            {
                return(errorResponse !);
            }

            var validationError = ValidateModel(user);

            if (validationError != null)
            {
                return(await CreateValidationError(req, validationError));
            }

            var entity = await usersTable.GetSingle(subject);

            if (entity == null)
            {
                return(req.CreateResponse(HttpStatusCode.NotFound));
            }

            if (user.PublicUrl == string.Empty)
            {
                user = user with {
                    PublicUrl = null
                }
            }
            ;
            if (user.PublicTwitter == string.Empty)
            {
                user = user with {
                    PublicTwitter = null
                }
            }
            ;

            var update = false;

            if (user.NickName != null && user.NickName != entity.NickName)
            {
                if (user.NickName.Length == 0)
                {
                    return(await CreateValidationError(req, $"Nickname must not be empty."));
                }
                entity.NickName = user.NickName;
                update          = true;
            }

            if (user.Email != null && user.Email != entity.Email)
            {
                if (user.Email.Length == 0)
                {
                    return(await CreateValidationError(req, $"Email must not be empty."));
                }
                entity.Email = user.Email;
                update       = true;
            }

            if (user.PublicTwitter != null && user.PublicTwitter != entity.PublicTwitter)
            {
                entity.PublicTwitter = user.PublicTwitter.Length == 0 ? null : user.PublicTwitter;
                update = true;
            }

            if (user.PublicUrl != null && user.PublicUrl != entity.PublicUrl)
            {
                entity.PublicUrl = user.PublicUrl.Length == 0 ? null : user.PublicUrl;
                update           = true;
            }

            if (update)
            {
                await usersTable.Replace(entity);
            }

            return(await CreateResponse(req, mapper.Map <User, UserGetDto>(entity)));
        }