mirror of
https://github.com/arnaucube/goRecommender.git
synced 2026-02-06 19:16:39 +01:00
added ipFilter, implemented select item by user (adding scores) --> not finished yet
This commit is contained in:
@@ -36,3 +36,12 @@ GET /r/{userid}/{nrec}
|
||||
{userid}: is the userid
|
||||
{nrec}: number of recommendations requested
|
||||
```
|
||||
|
||||
- Select Item
|
||||
|
||||
```
|
||||
POST /selectItem
|
||||
{
|
||||
userid: "user1",
|
||||
itemid: "item1"
|
||||
}
|
||||
|
||||
30
ipFilter.go
Normal file
30
ipFilter.go
Normal file
@@ -0,0 +1,30 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func ipFilter(w http.ResponseWriter, r *http.Request) {
|
||||
var err error
|
||||
fmt.Println(r.RemoteAddr)
|
||||
reqIP := strings.Split(r.RemoteAddr, ":")[0]
|
||||
for _, ip := range serverConfig.BlockedIPs {
|
||||
if reqIP == ip {
|
||||
err = errors.New("ip not allowed to post images")
|
||||
}
|
||||
}
|
||||
|
||||
for _, ip := range serverConfig.AllowedIPs {
|
||||
if reqIP != ip {
|
||||
err = errors.New("ip not allowed to post images")
|
||||
}
|
||||
}
|
||||
//return err
|
||||
if err != nil {
|
||||
fmt.Fprintln(w, err.Error())
|
||||
return
|
||||
}
|
||||
}
|
||||
27
mongodb.go
27
mongodb.go
@@ -110,6 +110,33 @@ func getUserById(id string) (UserModel, error) {
|
||||
return result, err
|
||||
}
|
||||
}
|
||||
func getItemById(id string) (ItemModel, error) {
|
||||
result := ItemModel{}
|
||||
err := itemCollection.Find(bson.M{"id": id}).One(&result)
|
||||
if err != nil {
|
||||
//user not exist
|
||||
return result, err
|
||||
} else {
|
||||
//user exist
|
||||
return result, err
|
||||
}
|
||||
}
|
||||
func updateItem(item ItemModel) (ItemModel, error) {
|
||||
err := itemCollection.Update(bson.M{"id": item.ID}, item)
|
||||
if err != nil {
|
||||
//log.Fatal(err)
|
||||
return item, err
|
||||
}
|
||||
return item, err
|
||||
}
|
||||
func updateUser(user UserModel) (UserModel, error) {
|
||||
err := userCollection.Update(bson.M{"id": user.ID}, user)
|
||||
if err != nil {
|
||||
return user, err
|
||||
}
|
||||
return user, err
|
||||
}
|
||||
|
||||
func getAllItems() ([]ItemModel, error) {
|
||||
result := []ItemModel{}
|
||||
iter := itemCollection.Find(nil).Limit(100).Iter()
|
||||
|
||||
@@ -9,6 +9,7 @@ type ItemModel struct {
|
||||
ID string
|
||||
TRecommended int
|
||||
TActed int
|
||||
TScored int //times acted from recommendation
|
||||
}
|
||||
|
||||
var scores []float64
|
||||
|
||||
@@ -20,8 +20,10 @@ type Route struct {
|
||||
|
||||
//server config
|
||||
type ServerConfig struct {
|
||||
ServerIP string `json:"serverIP"`
|
||||
ServerPort string `json:"serverPort"`
|
||||
ServerIP string `json:"serverIP"`
|
||||
ServerPort string `json:"serverPort"`
|
||||
AllowedIPs []string `json:"allowedIPs"`
|
||||
BlockedIPs []string `json:"blockedIPs"`
|
||||
}
|
||||
|
||||
var serverConfig ServerConfig
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
{
|
||||
"serverIP": "127.0.0.1",
|
||||
"serverPort": "3056"
|
||||
"serverPort": "3056",
|
||||
"allowedIPs": [
|
||||
"127.0.0.1"
|
||||
],
|
||||
"blockedIPs": []
|
||||
}
|
||||
|
||||
@@ -30,6 +30,12 @@ var routes = Routes{
|
||||
"/user",
|
||||
NewUser,
|
||||
},
|
||||
Route{
|
||||
"SelectItem",
|
||||
"GET",
|
||||
"/selectItem/{userid}/{itemid}",
|
||||
SelectItem,
|
||||
},
|
||||
}
|
||||
|
||||
//ROUTES
|
||||
@@ -39,6 +45,7 @@ func Index(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func NewUser(w http.ResponseWriter, r *http.Request) {
|
||||
ipFilter(w, r)
|
||||
decoder := json.NewDecoder(r.Body)
|
||||
var newUser UserModel
|
||||
err := decoder.Decode(&newUser)
|
||||
@@ -51,6 +58,7 @@ func NewUser(w http.ResponseWriter, r *http.Request) {
|
||||
fmt.Fprintln(w, "new user added: ", newUser.ID)
|
||||
}
|
||||
func Recommendations(w http.ResponseWriter, r *http.Request) {
|
||||
ipFilter(w, r)
|
||||
vars := mux.Vars(r)
|
||||
userid := vars["userid"]
|
||||
nrec, err := strconv.Atoi(vars["nrec"])
|
||||
@@ -61,3 +69,38 @@ func Recommendations(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
fmt.Fprintln(w, "recommendations")
|
||||
}
|
||||
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")
|
||||
}
|
||||
|
||||
//increase TActed in item
|
||||
item.TActed = item.TActed + 1
|
||||
|
||||
//save item
|
||||
item, err = updateItem(item)
|
||||
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)
|
||||
|
||||
//save user
|
||||
user, err = updateUser(user)
|
||||
check(err)
|
||||
fmt.Println(user)
|
||||
|
||||
fmt.Fprintln(w, "user: "+userid+", selects item: "+itemid)
|
||||
}
|
||||
|
||||
12
tests.sh
12
tests.sh
@@ -10,6 +10,16 @@ http http://127.0.0.1:3056/user id="user2" age=32
|
||||
echo "------------------"
|
||||
|
||||
echo "[Getting recommendations for user]"
|
||||
|
||||
echo http http://127.0.0.1:3056/user1/3
|
||||
http http://127.0.0.1:3056/r/user1/3
|
||||
|
||||
|
||||
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 "[Getting recommendations for user]"
|
||||
echo http http://127.0.0.1:3056/user1/3
|
||||
http http://127.0.0.1:3056/r/user1/3
|
||||
|
||||
Reference in New Issue
Block a user