From fe78d1acaa48290b2dcf9db6eac3fec5576063fe Mon Sep 17 00:00:00 2001 From: arnaucode Date: Fri, 7 Jul 2017 20:45:25 +0200 Subject: [PATCH] recommending --- mongodb.go | 15 ++++++++------- recommendations.go | 16 +++++++--------- serverRoutes.go | 19 +++++++++++-------- tests.sh | 1 + 4 files changed, 27 insertions(+), 24 deletions(-) diff --git a/mongodb.go b/mongodb.go index e27f2ca..c810a42 100644 --- a/mongodb.go +++ b/mongodb.go @@ -141,11 +141,12 @@ func getAllItems() ([]ItemModel, error) { result := []ItemModel{} iter := itemCollection.Find(nil).Limit(100).Iter() err := iter.All(&result) - if err != nil { - //user not exist - return result, err - } else { - //user exist - return result, err - } + return result, err +} + +func getItemsNotActed(actedItems []string) ([]ItemModel, error) { + result := []ItemModel{} + iter := itemCollection.Find(bson.M{"id": bson.M{"$nin": actedItems}}).Limit(100).Iter() + err := iter.All(&result) + return result, err } diff --git a/recommendations.go b/recommendations.go index 67548d2..00a53f6 100644 --- a/recommendations.go +++ b/recommendations.go @@ -6,18 +6,16 @@ import ( "github.com/fatih/color" ) -func getRecommendations(userid string, nrec int) { - - fmt.Println(userid) - fmt.Println(nrec) - +func getRecommendations(userid string, nrec int) []ItemModel { user, err := getUserById(userid) check(err) - color.Blue("user: ") - fmt.Println(user) - items, err := getAllItems() + items, err := getItemsNotActed(user.Actions) check(err) - color.Blue("all items: ") + + //select nrec items from the items array + + color.Blue("recommended items: ") fmt.Println(items) + return items } diff --git a/serverRoutes.go b/serverRoutes.go index 5757da4..5d321a8 100644 --- a/serverRoutes.go +++ b/serverRoutes.go @@ -65,9 +65,12 @@ func Recommendations(w http.ResponseWriter, r *http.Request) { check(err) //now, get recommendations - getRecommendations(userid, nrec) + items := getRecommendations(userid, nrec) + //convert []items struct to json + jItems, err := json.Marshal(items) + check(err) - fmt.Fprintln(w, "recommendations") + fmt.Fprintln(w, string(jItems)) } func SelectItem(w http.ResponseWriter, r *http.Request) { ipFilter(w, r) @@ -80,6 +83,12 @@ func SelectItem(w http.ResponseWriter, r *http.Request) { 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 @@ -88,12 +97,6 @@ func SelectItem(w http.ResponseWriter, r *http.Request) { check(err) fmt.Println(item) - //find user - user, err := getUserById(userid) - if err != nil { - fmt.Fprintln(w, "user "+userid+" not found") - } - //add item to []Actions of user user.Actions = append(user.Actions, itemid) diff --git a/tests.sh b/tests.sh index cd56b8f..5915505 100644 --- a/tests.sh +++ b/tests.sh @@ -19,6 +19,7 @@ echo "[selecting item by user]" echo http http://127.0.0.1:3056/selectItem/user1/item1 http http://127.0.0.1:3056/selectItem/user1/item1 +echo "------------------" echo "[Getting recommendations for user]" echo http http://127.0.0.1:3056/user1/3