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  }