From 4d05a266d199fe5d7f19df48b3be7ac20c5a6f78 Mon Sep 17 00:00:00 2001 From: Dan Ballard Date: Tue, 12 May 2015 23:21:06 -0700 Subject: [PATCH] work on news loading --- news/news.go | 58 +++++++++++++++++++++++++++++++++++++++++++---- route_handlers.go | 10 ++++++-- 2 files changed, 62 insertions(+), 6 deletions(-) diff --git a/news/news.go b/news/news.go index a73a6d2..54b7b02 100644 --- a/news/news.go +++ b/news/news.go @@ -5,6 +5,8 @@ import ( "database/sql" _ "github.com/lib/pq" "fmt" + "github.com/dballard/transmet/categories" + ) type News struct { @@ -32,8 +34,18 @@ func (news *News) Insert(db *sql.DB) error { return nil } +func nullStringToString(str *sql.NullString) string { + if str.Valid { + return str.String + } else { + return "" + } +} + func Unexported(db *sql.DB) (map[int]*NewsContainer, error) { - rows, err := db.Query("SELECT url, title, category_id, timestamp, notes FROM news WHERE exported=false") + categories.LoadCategories(db) + + rows, err := db.Query("SELECT url, title, category_id, timestamp, notes FROM news WHERE exported=false order by category_id ASC") if err != nil { fmt.Println("DB errpr reading unexported news: ", err) return nil, err @@ -43,10 +55,48 @@ func Unexported(db *sql.DB) (map[int]*NewsContainer, error) { for rows.Next() { news := News{} - var url sql.NullString - err := rows.Scan(&news.Url, &news.Title, &news.Category_id, &news.Date, &news.Notes) + var url, title, notes sql.NullString + var date, category_id sql.NullInt64 + err := rows.Scan(&url, &title, &category_id, &news.Date, ¬es) + if err != nil { + fmt.Println("Error reading news from DB: " + err.Error()) + return nil, err + } + + news.Url = nullStringToString(&url) + news.Title = nullStringToString(&title) + news.Notes = nullStringToString(¬es) + + if date.Valid { + news.Date = time.Unix(date.Int64, 0) + } else { + news.Date = time.Now() + } + + cid := 1 + if category_id.Valid { + cid = int(category_id.Int64) + } + + var container *NewsContainer + var ok bool + fmt.Println("cid: ", cid) + if container, ok = newsFlat[cid]; !ok { + fmt.Println("ADDING") + // need new container for new cid + container = &NewsContainer{ Name: categories.CategoriesFlat[cid].Name, News: []News{}, Children: map[int]*NewsContainer{} } + newsFlat[cid] = container + parent := categories.CategoriesFlat[cid].Parent + if parent.Valid { + fmt.Println("parent: ", parent.Int64) + newsFlat[int(parent.Int64)].Children[cid] = container + } else { + fmt.Println("no parent") + newsTree[cid] = container + } + } + container.News = append(container.News, news) } - return newsTree, nil } \ No newline at end of file diff --git a/route_handlers.go b/route_handlers.go index 53049c9..90a0ac4 100644 --- a/route_handlers.go +++ b/route_handlers.go @@ -190,11 +190,17 @@ func templateFormHandler(w http.ResponseWriter, r *http.Request, user *user.User session, _ := store.Get(r, "c_user") flashes := GetFlashes(session) session.Save(r, w) - ShowTemplate("list", w, map[string]interface{}{"user": user, "flashes": flashes}) + + news, err := news.Unexported(db) + if err != nil { + return + } + + ShowTemplate("list", w, map[string]interface{}{"user": user, "flashes": flashes, "news": news}) } func templatePostHandler(w http.ResponseWriter, r *http.Request, user *user.User) { - + }