github.com/bitcubate/cryptojournal@v1.2.5-0.20171102134152-f578b3d788ab/src/users/actions/show.go (about)

     1  package useractions
     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  	"github.com/bitcubate/cryptojournal/src/stories"
    13  	"github.com/bitcubate/cryptojournal/src/users"
    14  )
    15  
    16  // HandleShow displays a single user.
    17  func HandleShow(w http.ResponseWriter, r *http.Request) error {
    18  
    19  	// No authorisation on user show
    20  
    21  	// Fetch the  params
    22  	params, err := mux.Params(r)
    23  	if err != nil {
    24  		return server.InternalError(err)
    25  	}
    26  
    27  	// Find the user
    28  	user, err := users.Find(params.GetInt(users.KeyName))
    29  	if err != nil {
    30  		return server.NotFoundError(err)
    31  	}
    32  
    33  	// Get the user comments
    34  	q := comments.Where("user_id=?", user.ID).Limit(10).Order("created_at desc")
    35  	userComments, err := comments.FindAll(q)
    36  	if err != nil {
    37  		return server.InternalError(err)
    38  	}
    39  
    40  	// Get the user stories
    41  	q = stories.Where("user_id=?", user.ID).Limit(50).Order("created_at desc")
    42  	userStories, err := stories.FindAll(q)
    43  	if err != nil {
    44  		return server.InternalError(err)
    45  	}
    46  
    47  	// Find logged in user (if any)
    48  	currentUser := session.CurrentUser(w, r)
    49  
    50  	// Render the template
    51  	view := view.NewRenderer(w, r)
    52  	view.CacheKey(user.CacheKey())
    53  	view.AddKey("user", user)
    54  	view.AddKey("stories", userStories)
    55  	view.AddKey("comments", userComments)
    56  	view.AddKey("currentUser", currentUser)
    57  	return view.Render()
    58  }
    59  
    60  // HandleShowName redirects a GET request of /u/username to the user show page
    61  func HandleShowName(w http.ResponseWriter, r *http.Request) error {
    62  
    63  	// Fetch the  params
    64  	params, err := mux.Params(r)
    65  	if err != nil {
    66  		return server.InternalError(err)
    67  	}
    68  
    69  	// Find the user by name
    70  	q := users.Where("name=?", params.Get("name"))
    71  	results, err := users.FindAll(q)
    72  	if err != nil {
    73  		return server.NotFoundError(err, "Error finding user")
    74  	}
    75  
    76  	// If valid query but no results
    77  	if len(results) == 0 {
    78  		return server.NotFoundError(err, "User not found")
    79  	}
    80  
    81  	// Redirect to user show page
    82  	return server.Redirect(w, r, results[0].ShowURL())
    83  }