Cache front page results
This commit is contained in:
parent
f4ca9e2dbc
commit
d40dc21627
5 changed files with 82 additions and 89 deletions
|
@ -40,9 +40,54 @@ func (db *pgDB) IncDownloads(ID string) error {
|
|||
return err
|
||||
}
|
||||
|
||||
/* GetVisitedBooks get the most visited books
|
||||
*/
|
||||
func (db *pgDB) GetVisitedBooks(num int) (books []Book, err error) {
|
||||
func (db *pgDB) GetFrontPage() FrontPage {
|
||||
return db.frontPage
|
||||
}
|
||||
|
||||
func (db *pgDB) frontPageUpdater() {
|
||||
periodicity := 5 * time.Minute
|
||||
|
||||
for true {
|
||||
tags, err := db.getTags(tagsDisplay)
|
||||
if err != nil {
|
||||
log.Error("Error updating tags: ", err)
|
||||
} else {
|
||||
db.frontPage.Tags = tags
|
||||
}
|
||||
|
||||
count, err := db.getCount()
|
||||
if err != nil {
|
||||
log.Error("Error updating count: ", err)
|
||||
} else {
|
||||
db.frontPage.Count = count
|
||||
}
|
||||
|
||||
last, _, err := db.GetBooks("", booksFrontPage, 0)
|
||||
if err != nil {
|
||||
log.Error("Error updating last books: ", err)
|
||||
} else {
|
||||
db.frontPage.Last = last
|
||||
}
|
||||
|
||||
visited, err := db.getVisitedBooks(booksFrontPage)
|
||||
if err != nil {
|
||||
log.Error("Error updating visited books: ", err)
|
||||
} else {
|
||||
db.frontPage.Visited = visited
|
||||
}
|
||||
|
||||
download, err := db.getDownloadedBooks(booksFrontPage)
|
||||
if err != nil {
|
||||
log.Error("Error updating download books: ", err)
|
||||
} else {
|
||||
db.frontPage.Download = download
|
||||
}
|
||||
|
||||
time.Sleep(periodicity)
|
||||
}
|
||||
}
|
||||
|
||||
func (db *pgDB) getVisitedBooks(num int) (books []Book, err error) {
|
||||
err = db.sql.Model(&books).
|
||||
Column("Visit").
|
||||
Order("views DESC NULLS LAST").
|
||||
|
@ -51,9 +96,7 @@ func (db *pgDB) GetVisitedBooks(num int) (books []Book, err error) {
|
|||
return
|
||||
}
|
||||
|
||||
/* GetDownloadedBooks the most downloaded books
|
||||
*/
|
||||
func (db *pgDB) GetDownloadedBooks(num int) (books []Book, err error) {
|
||||
func (db *pgDB) getDownloadedBooks(num int) (books []Book, err error) {
|
||||
err = db.sql.Model(&books).
|
||||
Column("Visit").
|
||||
Order("downloads DESC NULLS LAST").
|
||||
|
@ -62,31 +105,21 @@ func (db *pgDB) GetDownloadedBooks(num int) (books []Book, err error) {
|
|||
return
|
||||
}
|
||||
|
||||
func (db *pgDB) GetTags() ([]string, error) {
|
||||
return db.tags, nil
|
||||
}
|
||||
|
||||
func (db *pgDB) updateTags() {
|
||||
var tags []string
|
||||
err := db.sql.Model(&Book{}).
|
||||
func (db *pgDB) getTags(num int) (tags []string, err error) {
|
||||
err = db.sql.Model(&Book{}).
|
||||
ColumnExpr("unnest(tags) as tag").
|
||||
Where("active = true").
|
||||
Group("tag").
|
||||
OrderExpr("count(*) DESC").
|
||||
Limit(tagsDisplay).
|
||||
Limit(num).
|
||||
Select(&tags)
|
||||
if err != nil {
|
||||
log.Error("Error updating tags: ", err)
|
||||
} else {
|
||||
db.tags = tags
|
||||
}
|
||||
return tags, err
|
||||
}
|
||||
|
||||
func (db *pgDB) tagUpdater() {
|
||||
periodicity := 57 * time.Minute
|
||||
|
||||
for true {
|
||||
db.updateTags()
|
||||
time.Sleep(periodicity)
|
||||
}
|
||||
func (db *pgDB) getCount() (count int, err error) {
|
||||
err = db.sql.Model(&Book{}).
|
||||
ColumnExpr("count(*)").
|
||||
Where("active = true").
|
||||
Select(&count)
|
||||
return count, err
|
||||
}
|
||||
|
|
Reference in a new issue