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	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}