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