package database import ( log "github.com/cihub/seelog" "os" "gopkg.in/mgo.v2" ) type DB interface { Close() Copy() DB AddBook(book map[string]interface{}) error GetBooks(query string, length int, start int) (books []Book, num int, err error) GetBooksIter() Iter GetNewBooks(query string, length int, start int) (books []Book, num int, err error) GetBookId(id string) (Book, error) DeleteBook(id string) error UpdateBook(id string, data map[string]interface{}) error FlagBadQuality(id string, user string) error ActiveBook(id string) error IsBookActive(id string) bool User(name string) *User AddUser(name string, pass string) error AddNews(text string) error GetNews(num int, days int) (news []News, err error) AddStats(stats interface{}) error GetVisitedBooks() (books []Book, err error) UpdateMostVisited() error GetDownloadedBooks() (books []Book, err error) UpdateDownloadedBooks() error GetTags() ([]string, error) UpdateTags() error GetVisits(visitType VisitType) ([]Visits, error) UpdateHourVisits() error UpdateDayVisits() error UpdateMonthVisits() error UpdateHourDownloads() error UpdateDayDownloads() error UpdateMonthDownloads() error } type Iter interface { Close() error Next(interface{}) bool } func Init(host string, name string) DB { var err error db := new(mgoDB) db.session, err = mgo.Dial(host) if err != nil { log.Critical(err) os.Exit(1) } db.name = name db.initIndexes() return db } func RO(db DB) DB { return &roDB{db} }