github.com/bitcubate/cryptojournal@v1.2.5-0.20171102134152-f578b3d788ab/src/comments/actions/index.go (about) 1 package commentactions 2 3 import ( 4 "net/http" 5 6 "github.com/fragmenta/mux" 7 "github.com/fragmenta/server" 8 "github.com/fragmenta/view" 9 10 "github.com/bitcubate/cryptojournal/src/comments" 11 "github.com/bitcubate/cryptojournal/src/lib/session" 12 ) 13 14 // HandleIndex displays a list of comments. 15 func HandleIndex(w http.ResponseWriter, r *http.Request) error { 16 17 // Get the params 18 params, err := mux.Params(r) 19 if err != nil { 20 return server.InternalError(err) 21 } 22 23 // Build a query 24 q := comments.Query().Order("created_at desc").Limit(100) 25 26 // Filter on user id - we only show the actual user's comments 27 // so not a nested view as in HN 28 userID := params.GetInt("u") 29 if userID > 0 { 30 q.Where("user_id=?", userID) 31 } 32 33 // Filter if requested 34 filter := params.Get("filter") 35 if len(filter) > 0 { 36 q.Where("name ILIKE ?", filter) 37 } 38 39 // Fetch the comments 40 results, err := comments.FindAll(q) 41 if err != nil { 42 return server.InternalError(err) 43 } 44 45 // Get current user 46 currentUser := session.CurrentUser(w, r) 47 48 // Render the template 49 view := view.NewRenderer(w, r) 50 view.AddKey("filter", filter) 51 view.AddKey("comments", results) 52 view.AddKey("currentUser", currentUser) 53 return view.Render() 54 }