Keep count of downladed/viewed books
This commit is contained in:
parent
68ffe6cf5b
commit
71d975c2f7
7 changed files with 109 additions and 91 deletions
|
@ -24,6 +24,7 @@ type Book struct {
|
|||
Active bool `sql:",notnull"`
|
||||
UploadDate time.Time
|
||||
Tsv string
|
||||
Visit *Visit
|
||||
}
|
||||
|
||||
// AddBook to the database
|
||||
|
|
|
@ -24,9 +24,10 @@ type DB interface {
|
|||
AddNews(text string) error
|
||||
AddRawNews(text string, date time.Time) error
|
||||
GetNews(num int, days int) (news []New, err error)
|
||||
AddStats(stats interface{}) error
|
||||
GetVisitedBooks() (books []Book, err error)
|
||||
GetDownloadedBooks() (books []Book, err error)
|
||||
IncViews(ID string) error
|
||||
IncDownloads(ID string) error
|
||||
GetVisitedBooks(num int) (books []Book, err error)
|
||||
GetDownloadedBooks(num int) (books []Book, err error)
|
||||
GetTags() ([]string, error)
|
||||
}
|
||||
|
||||
|
|
|
@ -77,16 +77,20 @@ func (db *roDB) GetNews(num int, days int) (news []New, err error) {
|
|||
return db.db.GetNews(num, days)
|
||||
}
|
||||
|
||||
func (db *roDB) AddStats(stats interface{}) error {
|
||||
func (db *roDB) IncViews(ID string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (db *roDB) GetVisitedBooks() (books []Book, err error) {
|
||||
return db.db.GetVisitedBooks()
|
||||
func (db *roDB) IncDownloads(ID string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (db *roDB) GetDownloadedBooks() (books []Book, err error) {
|
||||
return db.db.GetDownloadedBooks()
|
||||
func (db *roDB) GetVisitedBooks(num int) (books []Book, err error) {
|
||||
return db.db.GetVisitedBooks(num)
|
||||
}
|
||||
|
||||
func (db *roDB) GetDownloadedBooks(num int) (books []Book, err error) {
|
||||
return db.db.GetDownloadedBooks(num)
|
||||
}
|
||||
|
||||
func (db *roDB) GetTags() ([]string, error) {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
// TODO
|
||||
package database
|
||||
|
||||
import (
|
||||
|
@ -7,20 +6,60 @@ import (
|
|||
log "github.com/cihub/seelog"
|
||||
)
|
||||
|
||||
func (db *pgDB) AddStats(stats interface{}) error {
|
||||
return nil
|
||||
type Visit struct {
|
||||
ID int
|
||||
Downloads int `sql:",notnull"`
|
||||
Views int `sql:",notnull"`
|
||||
BookID string
|
||||
Book *Book
|
||||
}
|
||||
|
||||
/* Get the most visited books
|
||||
*/
|
||||
func (db *pgDB) GetVisitedBooks() (books []Book, err error) {
|
||||
return []Book{}, nil
|
||||
func (db *pgDB) IncViews(ID string) error {
|
||||
visit := &Visit{
|
||||
Downloads: 0,
|
||||
Views: 1,
|
||||
BookID: ID,
|
||||
}
|
||||
_, err := db.sql.Model(visit).
|
||||
OnConflict("(book_id) DO UPDATE").
|
||||
Set("views = Visit.views + 1").
|
||||
Insert()
|
||||
return err
|
||||
}
|
||||
|
||||
/* Get the most downloaded books
|
||||
func (db *pgDB) IncDownloads(ID string) error {
|
||||
visit := &Visit{
|
||||
Downloads: 1,
|
||||
Views: 0,
|
||||
BookID: ID,
|
||||
}
|
||||
_, err := db.sql.Model(visit).
|
||||
OnConflict("(book_id) DO UPDATE").
|
||||
Set("downloads = Visit.downloads + 1").
|
||||
Insert()
|
||||
return err
|
||||
}
|
||||
|
||||
/* GetVisitedBooks get the most visited books
|
||||
*/
|
||||
func (db *pgDB) GetDownloadedBooks() (books []Book, err error) {
|
||||
return []Book{}, nil
|
||||
func (db *pgDB) GetVisitedBooks(num int) (books []Book, err error) {
|
||||
err = db.sql.Model(&books).
|
||||
Column("Visit").
|
||||
Order("views DESC NULLS LAST").
|
||||
Limit(num).
|
||||
Select()
|
||||
return
|
||||
}
|
||||
|
||||
/* GetDownloadedBooks the most downloaded books
|
||||
*/
|
||||
func (db *pgDB) GetDownloadedBooks(num int) (books []Book, err error) {
|
||||
err = db.sql.Model(&books).
|
||||
Column("Visit").
|
||||
Order("downloads DESC NULLS LAST").
|
||||
Limit(num).
|
||||
Select()
|
||||
return
|
||||
}
|
||||
|
||||
func (db *pgDB) GetTags() ([]string, error) {
|
||||
|
|
Reference in a new issue