/// <summary>
        /// Creates a new todo item for the current user.
        /// </summary>
        public async Task <IHttpActionResult> Post(TodoItemCreate value)
        {
            if (value == null || string.IsNullOrWhiteSpace(value.Title))
            {
                return(BadRequest("Title is required"));
            }
            if (value == null || string.IsNullOrWhiteSpace(value.CategoryId))
            {
                return(BadRequest("CategoryId is required"));
            }

            // Create a new category via the Taxonomy Web API if requested.
            if (!string.IsNullOrWhiteSpace(value.NewCategoryName))
            {
                var client = await CategoryController.GetTaxonomyClient(this.User);

                var newCategory = new Category {
                    Name = value.NewCategoryName, IsPrivate = value.NewCategoryIsPrivate
                };
                var newCategoryRequest = new HttpRequestMessage(HttpMethod.Post, SiteConfiguration.TaxonomyWebApiRootUrl + "api/category");
                newCategoryRequest.Content = new JsonContent(newCategory);
                var newCategoryResponse = await client.SendAsync(newCategoryRequest);

                newCategoryResponse.EnsureSuccessStatusCode();
                var newCategoryResponseString = await newCategoryResponse.Content.ReadAsStringAsync();

                var category = JsonConvert.DeserializeObject <Category>(newCategoryResponseString);
                value.CategoryId = category.Id;
            }

            var userId = this.User.GetUniqueIdentifier();
            var data   = new TodoItemData(value.Title, value.CategoryId, userId);

            database.Add(data);
            return(Ok());
        }