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 }