package main import ( "encoding/json" "fmt" "net/http" "strconv" "github.com/gorilla/mux" ) type Routes []Route var routes = Routes{ Route{ "Index", "GET", "/", Index, }, Route{ "Recommendations", "GET", "/r/{userid}/{nrec}", Recommendations, }, Route{ "NewUser", "POST", "/user", NewUser, }, Route{ "SelectItem", "GET", "/selectItem/{userid}/{itemid}", SelectItem, }, } //ROUTES func Index(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "ask for recommendations in /r") } func NewUser(w http.ResponseWriter, r *http.Request) { ipFilter(w, r) decoder := json.NewDecoder(r.Body) var newUser UserModel err := decoder.Decode(&newUser) check(err) defer r.Body.Close() newUser = user.clusterAge(newUser) saveUser(userCollection, newUser) fmt.Println(newUser) jNewUser, err := json.Marshal(newUser) check(err) fmt.Fprintln(w, string(jNewUser)) } func Recommendations(w http.ResponseWriter, r *http.Request) { ipFilter(w, r) vars := mux.Vars(r) userid := vars["userid"] nrec, err := strconv.Atoi(vars["nrec"]) check(err) //now, get recommendations items := getRecommendations(userid, nrec) //convert []items struct to json jItems, err := json.Marshal(items) check(err) fmt.Fprintln(w, string(jItems)) } func SelectItem(w http.ResponseWriter, r *http.Request) { ipFilter(w, r) vars := mux.Vars(r) userid := vars["userid"] itemid := vars["itemid"] //find item item, err := getItemById(itemid) if err != nil { fmt.Fprintln(w, "item "+itemid+" not found") } //find user user, err := getUserById(userid) if err != nil { fmt.Fprintln(w, "user "+userid+" not found") } //increase TActed in item item.TActed = item.TActed + 1 //save item item, err = updateItem(item) check(err) fmt.Println(item) //add item to []Actions of user user.Actions = append(user.Actions, itemid) //save user user, err = updateUser(user) check(err) fmt.Println(user) fmt.Fprintln(w, "user: "+userid+", selects item: "+itemid) }