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 newUser = user.clusterAge(newUser)
55
56 saveUser(userCollection, newUser)
57
58 fmt.Println(newUser)
59 jNewUser, err := json.Marshal(newUser)
60 check(err)
61 fmt.Fprintln(w, string(jNewUser))
62}
63func Recommendations(w http.ResponseWriter, r *http.Request) {
64 ipFilter(w, r)
65 vars := mux.Vars(r)
66 userid := vars["userid"]
67 nrec, err := strconv.Atoi(vars["nrec"])
68 check(err)
69
70 //now, get recommendations
71 items := getRecommendations(userid, nrec)
72 //convert []items struct to json
73 jItems, err := json.Marshal(items)
74 check(err)
75
76 fmt.Fprintln(w, string(jItems))
77}
78func SelectItem(w http.ResponseWriter, r *http.Request) {
79 ipFilter(w, r)
80 vars := mux.Vars(r)
81 userid := vars["userid"]
82 itemid := vars["itemid"]
83 //find item
84 item, err := getItemById(itemid)
85 if err != nil {
86 fmt.Fprintln(w, "item "+itemid+" not found")
87 }
88
89 //find user
90 user, err := getUserById(userid)
91 if err != nil {
92 fmt.Fprintln(w, "user "+userid+" not found")
93 }
94
95 //increase TActed in item
96 item.TActed = item.TActed + 1
97
98 //save item
99 item, err = updateItem(item)
100 check(err)
101 fmt.Println(item)
102
103 //add item to []Actions of user
104 user.Actions = append(user.Actions, itemid)
105
106 //save user
107 user, err = updateUser(user)
108 check(err)
109 fmt.Println(user)
110
111 fmt.Fprintln(w, "user: "+userid+", selects item: "+itemid)
112}