From fd0b9cf53da23894195945786fbd769edc9d0146 Mon Sep 17 00:00:00 2001 From: Las Zenow Date: Sun, 4 Sep 2016 12:32:58 -0400 Subject: [PATCH] Use the right date type for news --- createdb.sql | 6 +++--- lib/database/news.go | 17 ++++++++++++++--- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/createdb.sql b/createdb.sql index aeb6a57..c2e18d8 100644 --- a/createdb.sql +++ b/createdb.sql @@ -16,9 +16,7 @@ CREATE TABLE books ( tsv tsvector ); --- -- Books text search index --- CREATE FUNCTION books_trigger() RETURNS trigger AS $$ declare lang_config regconfig; @@ -70,12 +68,14 @@ CREATE TRIGGER tsvectorupdate BEFORE INSERT OR UPDATE ON books FOR EACH ROW EXECUTE PROCEDURE books_trigger(); CREATE INDEX books_idx ON books USING GIN (tsv); + CREATE TABLE news ( id serial unique, - date time, + date timestamp, text text ); + CREATE TABLE users ( id serial unique, username varchar(255) unique, diff --git a/lib/database/news.go b/lib/database/news.go index 60617d0..c3c5702 100644 --- a/lib/database/news.go +++ b/lib/database/news.go @@ -1,6 +1,7 @@ package database import ( + "fmt" "time" ) @@ -13,17 +14,27 @@ type New struct { // AddNews creates a new entry func (db *pgDB) AddNews(text string) error { + return db.addRawNews(text, time.Now()) +} + +func (db *pgDB) addRawNews(text string, date time.Time) error { return db.sql.Create(&New{ Text: text, - Date: time.Now(), + Date: date, }) } // GetNews returns all the news for the last 'days' limiting with a maximum of 'num' results func (db *pgDB) GetNews(num int, days int) ([]New, error) { var news []New - err := db.sql.Model(&news). - Limit(num). + query := db.sql.Model(&news) + + if days != 0 { + daystr := fmt.Sprintf("%d days", days) + query = query.Where("date > CURRENT_TIMESTAMP-?::interval", daystr) + } + + err := query.Limit(num). Order("date DESC"). Select() return news, err