From 8b996803c8f56ce08b9b73537c5b04ba6cb42b09 Mon Sep 17 00:00:00 2001 From: Las Zenow Date: Mon, 19 Nov 2018 03:14:26 +0000 Subject: [PATCH] Add download counter on each book * Closes: #40 --- lib/database/database.go | 2 ++ lib/database/ro.go | 4 ++++ lib/database/stats.go | 9 +++++++++ lib/trantor.go | 16 +++++++++++----- templates/book.html | 4 ++++ 5 files changed, 30 insertions(+), 5 deletions(-) diff --git a/lib/database/database.go b/lib/database/database.go index 05a22ea..13daf9e 100644 --- a/lib/database/database.go +++ b/lib/database/database.go @@ -29,6 +29,7 @@ type DB interface { GetNews(num int, days int) (news []New, err error) IncViews(ID string) error IncDownloads(ID string) error + GetDownloadCounter(ID string) (int, error) GetFrontPage() FrontPage AddSubmission(submission Submission) (id int, err error) UpdateSubmission(id int, status string, book *Book) error @@ -222,6 +223,7 @@ $$ LANGUAGE sql IMMUTABLE; -- Visits indexes CREATE INDEX IF NOT EXISTS visits_downloads_idx on visits(downloads DESC NULLS LAST); CREATE INDEX IF NOT EXISTS visits_views_idx on visits(views DESC NULLS LAST); +CREATE INDEX IF NOT EXISTS visits_book_id_idx on visits(book_id); -- Submissions indexes CREATE INDEX IF NOT EXISTS submissions_id_idx on submissions(submission_id); diff --git a/lib/database/ro.go b/lib/database/ro.go index cd5a453..4deb60e 100644 --- a/lib/database/ro.go +++ b/lib/database/ro.go @@ -93,6 +93,10 @@ func (db *roDB) IncDownloads(ID string) error { return nil } +func (db *roDB) GetDownloadCounter(ID string) (int, error) { + return db.db.GetDownloadCounter(ID) +} + func (db *roDB) GetFrontPage() FrontPage { return db.db.GetFrontPage() } diff --git a/lib/database/stats.go b/lib/database/stats.go index b934366..e6d83d4 100644 --- a/lib/database/stats.go +++ b/lib/database/stats.go @@ -40,6 +40,15 @@ func (db *pgDB) IncDownloads(ID string) error { return err } +func (db *pgDB) GetDownloadCounter(ID string) (int, error) { + var num int + err := db.sql.Model(&Visit{}). + Column("downloads"). + Where("book_id = ?", ID). + Select(&num) + return num, err +} + func (db *pgDB) GetFrontPage() FrontPage { return db.frontPage } diff --git a/lib/trantor.go b/lib/trantor.go index e951492..a0f016b 100644 --- a/lib/trantor.go +++ b/lib/trantor.go @@ -49,11 +49,12 @@ func logoutHandler(h handler) { } type bookData struct { - S Status - Book database.Book - Description []string - Lists []database.BookList - UserLists []string + S Status + Book database.Book + Description []string + DownloadCounter int + Lists []database.BookList + UserLists []string } func bookHandler(h handler) { @@ -73,6 +74,11 @@ func bookHandler(h handler) { } data.S.Title = book.Title + author + " -- " + data.S.Title + data.DownloadCounter, err = h.db.GetDownloadCounter(id) + if err != nil { + log.Error("Error getting download counter: ", err) + } + data.Lists, err = h.db.GetListsByBook(id) if err != nil { log.Error("Error getting lists: ", err) diff --git a/templates/book.html b/templates/book.html index 1aa68e3..b5fd8a4 100644 --- a/templates/book.html +++ b/templates/book.html @@ -1,6 +1,7 @@ {{template "header.html" .S}} {{$role := .S.Role}} +{{$downloadCounter := .DownloadCounter}} {{with .Book}}