Keep count of downladed/viewed books

This commit is contained in:
Las Zenow 2017-05-30 22:10:21 +00:00
parent 68ffe6cf5b
commit 71d975c2f7
7 changed files with 109 additions and 91 deletions

View file

@ -24,6 +24,7 @@ type Book struct {
Active bool `sql:",notnull"`
UploadDate time.Time
Tsv string
Visit *Visit
}
// AddBook to the database

View file

@ -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)
}

View file

@ -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) {

View file

@ -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) {