public async Task <ActionResult <UploadState> > CreateUploadAsync(CreateNewBookRequest request) { try { // creating an entirely new book if (request.Book != null) { return(_uploads.CreateTask(new BookUpload { Book = request.Book, Content = request.Content })); } // adding contents to an existing book if (request.BookId != null) { var book = await _books.GetAsync(request.BookId); if (book == null) { return(ResultUtilities.NotFound <Book>(request.BookId)); } return(_uploads.CreateTask(new BookUpload { BookId = book.Id, Content = request.Content })); } } catch (InvalidOperationException e) { return(BadRequest(e.Message)); } throw new ArgumentException("Invalid upload state."); }