You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
2.0 KiB

6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "net/http"
  6. "strconv"
  7. "github.com/gorilla/mux"
  8. )
  9. type Routes []Route
  10. var routes = Routes{
  11. Route{
  12. "Index",
  13. "GET",
  14. "/",
  15. Index,
  16. },
  17. Route{
  18. "Recommendations",
  19. "GET",
  20. "/r/{userid}/{nrec}",
  21. Recommendations,
  22. },
  23. Route{
  24. "NewUser",
  25. "POST",
  26. "/user",
  27. NewUser,
  28. },
  29. Route{
  30. "SelectItem",
  31. "GET",
  32. "/selectItem/{userid}/{itemid}",
  33. SelectItem,
  34. },
  35. }
  36. //ROUTES
  37. func Index(w http.ResponseWriter, r *http.Request) {
  38. fmt.Fprintln(w, "ask for recommendations in /r")
  39. }
  40. func NewUser(w http.ResponseWriter, r *http.Request) {
  41. ipFilter(w, r)
  42. decoder := json.NewDecoder(r.Body)
  43. var newUser UserModel
  44. err := decoder.Decode(&newUser)
  45. check(err)
  46. defer r.Body.Close()
  47. newUser = user.clusterAge(newUser)
  48. saveUser(userCollection, newUser)
  49. fmt.Println(newUser)
  50. jNewUser, err := json.Marshal(newUser)
  51. check(err)
  52. fmt.Fprintln(w, string(jNewUser))
  53. }
  54. func Recommendations(w http.ResponseWriter, r *http.Request) {
  55. ipFilter(w, r)
  56. vars := mux.Vars(r)
  57. userid := vars["userid"]
  58. nrec, err := strconv.Atoi(vars["nrec"])
  59. check(err)
  60. //now, get recommendations
  61. items := getRecommendations(userid, nrec)
  62. //convert []items struct to json
  63. jItems, err := json.Marshal(items)
  64. check(err)
  65. fmt.Fprintln(w, string(jItems))
  66. }
  67. func SelectItem(w http.ResponseWriter, r *http.Request) {
  68. ipFilter(w, r)
  69. vars := mux.Vars(r)
  70. userid := vars["userid"]
  71. itemid := vars["itemid"]
  72. //find item
  73. item, err := getItemById(itemid)
  74. if err != nil {
  75. fmt.Fprintln(w, "item "+itemid+" not found")
  76. }
  77. //find user
  78. user, err := getUserById(userid)
  79. if err != nil {
  80. fmt.Fprintln(w, "user "+userid+" not found")
  81. }
  82. //increase TActed in item
  83. item.TActed = item.TActed + 1
  84. //save item
  85. item, err = updateItem(item)
  86. check(err)
  87. fmt.Println(item)
  88. //add item to []Actions of user
  89. user.Actions = append(user.Actions, itemid)
  90. //save user
  91. user, err = updateUser(user)
  92. check(err)
  93. fmt.Println(user)
  94. fmt.Fprintln(w, "user: "+userid+", selects item: "+itemid)
  95. }