// POST api/books
 public HttpResponseMessage Post(Book book)
 {
     var bookResource = _addBookQueryHandler.Execute(book);
     var httpResponseMessage = Request.CreateResponse(HttpStatusCode.Created, bookResource);
     httpResponseMessage.Headers.Location = bookResource.Self.Href;
     return httpResponseMessage;
 }
        public BookResource MapToResouce(Book book)
        {
            BookResource resource = new BookResource();
            resource.Id = book.Id;
            resource.Title = book.Title;
            resource.Author = book.Author;
            resource.Description = book.Description;
            resource.Self = _resourceLinker.GetResourceLink<BooksController>(request => request.Get(book.Id), "self", book.Title, HttpMethod.Get);
            resource.Links = new List<Link>();
            if (book.IsCheckedOut)
            {
                var checkInLink = _resourceLinker.GetResourceLink<CheckInController>(request => request.Post(book.Id), "Check In", book.Title, HttpMethod.Post);
                resource.Links.Add(checkInLink);
            }

            if (book.IsCheckedIn)
            {
                var checkoutLink = _resourceLinker.GetResourceLink<CheckedOutController>(request => request.Post(book.Id), "Check Out", book.Title, HttpMethod.Post);
                resource.Links.Add(checkoutLink);
            }
            resource.Links.Add(_resourceLinker.GetResourceLink<RootController>(request => request.Get(),"Home","Go Home",HttpMethod.Get));
            return resource;
        }
 public BookResource Execute(Book bookToAdd)
 {
     var book = _bookRepository.Add(bookToAdd);
     var resource = _bookResourceMapper.MapToResouce(book);
     return resource;
 }
 public Book Add(Book book)
 {
     book.Id = GetNextId();
     Books.Add(book);
     return book;
 }
 public AlreadyCheckedInException(Book book)
     : base(string.Format("Book {0} is already checked in", book.Id))
 {
 }