Library/models/book.go

57 lines
1.4 KiB
Go

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
}