75 lines
1.9 KiB
Go
75 lines
1.9 KiB
Go
package library
|
|
|
|
import (
|
|
"gitlab.thpeetz.de/kontor/kontor-go/pkg/dao"
|
|
|
|
mgo "gopkg.in/mgo.v2"
|
|
"gopkg.in/mgo.v2/bson"
|
|
)
|
|
|
|
// BookDAO extends the type BaseDAO.
|
|
type BookDAO struct {
|
|
Db dao.BaseDAO
|
|
}
|
|
|
|
const (
|
|
// BOOKCOLLECTION defines the collection name for storing books.
|
|
BOOKCOLLECTION = "book"
|
|
// BOOKMODEL defines the name of the book data model.
|
|
BOOKMODEL = "kontor.library.book"
|
|
)
|
|
|
|
// FindAll retrieves the list of books from the database.
|
|
func (m *BookDAO) FindAll() ([]Book, error) {
|
|
m.Db.Connect()
|
|
var books []Book
|
|
err := m.Db.MongoDb.C(BOOKCOLLECTION).Find(bson.M{"model": BOOKMODEL}).All(&books)
|
|
return books, err
|
|
}
|
|
|
|
// FindByID returns an book with given id or returns the error.
|
|
func (m *BookDAO) FindByID(id string) (Book, error) {
|
|
m.Db.Connect()
|
|
var book Book
|
|
err := m.Db.MongoDb.C(BOOKCOLLECTION).FindId(bson.ObjectIdHex(id)).One(&book)
|
|
return book, err
|
|
}
|
|
|
|
// FindByTitle returns a book with given title or returns the error.
|
|
func (m *BookDAO) FindByTitle(title string) (Book, error) {
|
|
m.Db.Connect()
|
|
var book Book
|
|
err := m.Db.MongoDb.C(BOOKCOLLECTION).Find(bson.M{"title": title, "model": BOOKMODEL}).One(&book)
|
|
return book, err
|
|
}
|
|
|
|
// Insert a book into database.
|
|
func (m *BookDAO) Insert(book Book) error {
|
|
m.Db.Connect()
|
|
book.Model = BOOKMODEL
|
|
err := m.Db.MongoDb.C(BOOKCOLLECTION).Insert(&book)
|
|
return err
|
|
}
|
|
|
|
// Upsert a book into database.
|
|
func (m *BookDAO) Upsert(book Book) (*mgo.ChangeInfo, error) {
|
|
m.Db.Connect()
|
|
book.Model = BOOKMODEL
|
|
info, err := m.Db.MongoDb.C(BOOKCOLLECTION).Upsert(bson.M{"title": book.Title}, &book)
|
|
return info, err
|
|
}
|
|
|
|
// Delete an existing book.
|
|
func (m *BookDAO) Delete(book Book) error {
|
|
m.Db.Connect()
|
|
err := m.Db.MongoDb.C(BOOKCOLLECTION).Remove(&book)
|
|
return err
|
|
}
|
|
|
|
// Update an existing book.
|
|
func (m *BookDAO) Update(book Book) error {
|
|
m.Db.Connect()
|
|
err := m.Db.MongoDb.C(BOOKCOLLECTION).UpdateId(book.ID, &book)
|
|
return err
|
|
}
|