2014-06-29 19:41:29 -05:00
|
|
|
package database
|
|
|
|
|
|
|
|
import (
|
2014-08-30 13:17:50 -05:00
|
|
|
log "github.com/cihub/seelog"
|
|
|
|
|
|
|
|
"os"
|
|
|
|
|
2014-08-18 19:27:53 -05:00
|
|
|
"gopkg.in/mgo.v2"
|
2014-06-29 19:41:29 -05:00
|
|
|
)
|
|
|
|
|
2017-05-21 10:16:16 +00:00
|
|
|
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
|
2014-06-29 19:41:29 -05:00
|
|
|
}
|
|
|
|
|
2015-04-21 21:52:34 -04:00
|
|
|
type Iter interface {
|
|
|
|
Close() error
|
|
|
|
Next(interface{}) bool
|
|
|
|
}
|
|
|
|
|
2017-05-21 10:16:16 +00:00
|
|
|
func Init(host string, name string) DB {
|
2014-06-29 19:41:29 -05:00
|
|
|
var err error
|
2017-05-21 10:16:16 +00:00
|
|
|
db := new(mgoDB)
|
2014-06-29 19:41:29 -05:00
|
|
|
db.session, err = mgo.Dial(host)
|
|
|
|
if err != nil {
|
|
|
|
log.Critical(err)
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
|
|
|
db.name = name
|
2014-08-31 15:09:59 -05:00
|
|
|
db.initIndexes()
|
2014-06-29 19:41:29 -05:00
|
|
|
return db
|
|
|
|
}
|
|
|
|
|
2017-05-21 10:16:16 +00:00
|
|
|
func RO(db DB) DB {
|
|
|
|
return &roDB{db}
|
2014-06-29 19:41:29 -05:00
|
|
|
}
|