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

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

            var existingUser = await usersTable.GetSingle(subject);

            if (existingUser != null)
            {
                return(await CreateConflictError(req, $"User already registered."));
            }

            // Deserialize and verify DTO
            var(user, errorResponse) = await DeserializeAndValidateBody <UserRegisterDto>(req);

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

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

            var validationError = ValidateModel(user);

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

            // Create data object from DTO
            var userToAdd = mapper.Map <UserRegisterDto, User>(user);

            userToAdd.RowKey = subject;

            // Store user
            await usersTable.Add(userToAdd);

            // Convert added user into DTO
            var userToReturn = mapper.Map <User, UserGetDto>(userToAdd);

            return(await CreateResponse(req, userToReturn, HttpStatusCode.Created));
        }