arnaucube
arnaucube/goRecommenderPublic Self-hosted repository
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}