Cache front page results

This commit is contained in:
Las Zenow 2017-06-05 23:03:24 +00:00
parent f4ca9e2dbc
commit d40dc21627
5 changed files with 82 additions and 89 deletions

View file

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