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 getRecommendations(userid, nrec)
69
70 fmt.Fprintln(w, "recommendations")
71}
72func SelectItem(w http.ResponseWriter, r *http.Request) {
73 ipFilter(w, r)
74 vars := mux.Vars(r)
75 userid := vars["userid"]
76 itemid := vars["itemid"]
77 //find item
78 item, err := getItemById(itemid)
79 if err != nil {
80 fmt.Fprintln(w, "item "+itemid+" not found")
81 }
82
83 //increase TActed in item
84 item.TActed = item.TActed + 1
85
86 //save item
87 item, err = updateItem(item)
88 check(err)
89 fmt.Println(item)
90
91 //find user
92 user, err := getUserById(userid)
93 if err != nil {
94 fmt.Fprintln(w, "user "+userid+" not found")
95 }
96
97 //add item to []Actions of user
98 user.Actions = append(user.Actions, itemid)
99
100 //save user
101 user, err = updateUser(user)
102 check(err)
103 fmt.Println(user)
104
105 fmt.Fprintln(w, "user: "+userid+", selects item: "+itemid)
106}