diff --git a/internal/database/articles.go b/internal/database/articles.go index 7b1fbf7..63f3a2c 100644 --- a/internal/database/articles.go +++ b/internal/database/articles.go @@ -133,3 +133,43 @@ func ArticleByID(store *Store, ID int, slug string) (article model.DisplayArticl return result, nil } + +func PreviousAndNextArticleUrlByID(store *Store, ID int) (nextUrl string, previousUrl string, err error) { + + nextResult, previousResult := "#", "#" + query, err := store.Prepare(` + select id,title, content, slug, original_url, source_id, created_at from articles where id = $1; + `) + if err != nil { + return nextResult, previousResult, err + } + defer query.Close() + + row := query.QueryRow(ID - 1) + if err != nil { + return nextResult, previousResult, err + } + + r := model.DisplayArticle{} + content := "" + err = row.Scan(&r.ID, &r.Title, &content, &r.Slug, &r.OriginalUrl, &r.SourceId, &r.CreatedAt) + if err != nil { + return nextResult, previousResult, err + } + + previousResult = fmt.Sprintf("/%d/%s", r.ID, r.Slug) + + row = query.QueryRow(ID + 1) + if err != nil { + return nextResult, previousResult, err + } + + content = "" + err = row.Scan(&r.ID, &r.Title, &content, &r.Slug, &r.OriginalUrl, &r.SourceId, &r.CreatedAt) + if err != nil { + return nextResult, previousResult, err + } + nextResult = fmt.Sprintf("/%d/%s", r.ID, r.Slug) + + return nextResult, previousResult, nil +} diff --git a/internal/server/articles.go b/internal/server/articles.go index 3243e45..d64ffab 100644 --- a/internal/server/articles.go +++ b/internal/server/articles.go @@ -1,6 +1,7 @@ package server import ( + "fmt" "github.com/gorilla/mux" "gitlab.com/kbr4/svevijesti/internal/database" "net/http" @@ -21,9 +22,51 @@ func rootHandler(wr http.ResponseWriter, req *http.Request) { http.Error(wr, err.Error(), http.StatusInternalServerError) } + dayBefore := "/dan/" + time.Now().Add(-24*time.Hour).Format("2006-01-02") + data := map[string]interface{}{ "title": title, "articles": articles, + "previous": dayBefore, + "next": "/", + } + + err = templates.ExecuteTemplate(wr, "homeHTML", data) + if err != nil { + http.Error(wr, err.Error(), http.StatusInternalServerError) + } +} + +func dailyArticlesHandler(wr http.ResponseWriter, req *http.Request) { + vars := mux.Vars(req) + day, err := time.Parse("2006-01-02", vars["date"]) + if err != nil { + http.Error(wr, err.Error(), http.StatusNotFound) + } + dayBefore := "/dan/" + day.Add(-24*time.Hour).Format("2006-01-02") + dayAfter := "/dan/" + day.Add(24*time.Hour).Format("2006-01-02") + + if day.Add(24*time.Hour).Format("2006-01-02") == time.Now().Format("2006-01-02") { + dayAfter = "/" + } + + title := fmt.Sprintf("Stare novine na dan %s", day.Format("2006-01-02")) + store, err := database.Connect() + if err != nil { + http.Error(wr, err.Error(), http.StatusInternalServerError) + } + defer store.Close() + + articles, err := database.ArticlesForDay(store, day) + if err != nil { + http.Error(wr, err.Error(), http.StatusInternalServerError) + } + + data := map[string]interface{}{ + "title": title, + "articles": articles, + "previous": dayBefore, + "next": dayAfter, } err = templates.ExecuteTemplate(wr, "homeHTML", data) @@ -50,10 +93,14 @@ func articleHandler(wr http.ResponseWriter, req *http.Request) { http.Error(wr, err.Error(), http.StatusNotFound) } + next, previous, _ := database.PreviousAndNextArticleUrlByID(store, articleID) + title := article.Title data := map[string]interface{}{ - "title": title, - "article": article, + "title": title, + "article": article, + "previous": previous, + "next": next, } err = templates.ExecuteTemplate(wr, "articleHTML", data) diff --git a/internal/server/server.go b/internal/server/server.go index 90cb0c8..9d7b07b 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -39,7 +39,8 @@ func init() { func CreateRoutes() *mux.Router { r := mux.NewRouter() - r.HandleFunc("/", rootHandler) + r.HandleFunc("/dan/{date}", dailyArticlesHandler) r.HandleFunc("/{id:[0-9]+}/{slug}", articleHandler) + r.HandleFunc("/", rootHandler) return r } diff --git a/server b/server index 0c3ea33..6cefd19 100755 Binary files a/server and b/server differ diff --git a/web/data/footer.html b/web/data/footer.html index a34300b..b5b225e 100644 --- a/web/data/footer.html +++ b/web/data/footer.html @@ -2,5 +2,12 @@ {{end}} diff --git a/web/data/header.html b/web/data/header.html index 88b0d46..3da02e7 100644 --- a/web/data/header.html +++ b/web/data/header.html @@ -12,7 +12,9 @@
{{end}} diff --git a/web/tpl/dailyArticles.html b/web/tpl/dailyArticles.html new file mode 100644 index 0000000..849ed2f --- /dev/null +++ b/web/tpl/dailyArticles.html @@ -0,0 +1,12 @@ +{{define "homeHTML"}} + +{{template "headHTML" .}} + +{{template "headerHTML" .}} + +{{template "articlesHTML" .}} + +{{template "footerHTML" .}} + + +{{end}}