package models import ( "fmt" ) // Book holds a book type Book struct { ID int64 `xorm:"int(11) autoincr not null unique pk"` Title string `xorm:"varchar(250) not null"` Description string `xorm:"varchar(750)"` Isbn string `xorm:"varchar(30)"` Year int64 `xorm:"int(11)"` Price float64 `xorm:"double"` Status int64 `xorm:"int(11)"` PublisherID int64 `xorm:"int(11)"` Created int64 `xorm:"created"` Updated int64 `xorm:"updated"` Quantity int64 `xorm:"-"` Publisher Publisher `xorm:"-"` Authors []Author `xorm:"-"` } // TableName returns the name for the books table func (Book) TableName() string { return "books" } // GetBookByID gets a Book by its ID func GetBookByID(ID int64) (book Book, exists bool, err error) { // Get the Book has, err := x.ID(ID).Get(&book) if has { // Get the books quantity. We can't join it because xorm ignores the Quantity option in struct book.Quantity, err = book.getQuantity() if err != nil { fmt.Println("Error getting quantity:", err) } // Get publisher. We can't join it because xorm ignores the PublisherID option in struct book.Publisher, _, err = GetPublisherByID(book.PublisherID) if err != nil { fmt.Println("Error getting publisher:", err) } // Get all authors book.Authors, err = GetAuthorsByBook(book) if err != nil { fmt.Println("Error getting authors:", err) } } return book, has, err }