arnaucube
arnaucube/goBlockchainDataAnalysisPublic Self-hosted repository
goBlockchainDataAnalysis/serverRoutes.go
serverRoutes.goRaw
  1package main
  2
  3import (
  4	"encoding/json"
  5	"fmt"
  6	"net/http"
  7
  8	"gopkg.in/mgo.v2/bson"
  9
 10	"github.com/gorilla/mux"
 11)
 12
 13type Routes []Route
 14
 15var routes = Routes{
 16	Route{
 17		"Index",
 18		"GET",
 19		"/",
 20		Index,
 21	},
 22	Route{
 23		"AllAddresses",
 24		"Get",
 25		"/alladdresses",
 26		AllAddresses,
 27	},
 28	Route{
 29		"AddressNetwork",
 30		"GET",
 31		"/address/network/{address}",
 32		AddressNetwork,
 33	},
 34	Route{
 35		"AddressSankey",
 36		"GET",
 37		"/address/sankey/{address}",
 38		AddressSankey,
 39	},
 40	Route{
 41		"NetworkMap",
 42		"Get",
 43		"/map",
 44		NetworkMap,
 45	},
 46	/*
 47		Route{
 48			"SelectItem",
 49			"GET",
 50			"/selectItem/{userid}/{itemid}",
 51			SelectItem,
 52		},
 53	*/
 54}
 55
 56//ROUTES
 57
 58func Index(w http.ResponseWriter, r *http.Request) {
 59	fmt.Fprintln(w, "ask for recommendations in /r")
 60	//http.FileServer(http.Dir("./web"))
 61}
 62
 63/*
 64func NewUser(w http.ResponseWriter, r *http.Request) {
 65	ipFilter(w, r)
 66	decoder := json.NewDecoder(r.Body)
 67	var newUser UserModel
 68	err := decoder.Decode(&newUser)
 69	check(err)
 70	defer r.Body.Close()
 71
 72	saveUser(userCollection, newUser)
 73
 74	fmt.Println(newUser)
 75	fmt.Fprintln(w, "new user added: ", newUser.ID)
 76}
 77*/
 78func AllAddresses(w http.ResponseWriter, r *http.Request) {
 79	ipFilter(w, r)
 80
 81	nodes := []NodeModel{}
 82	iter := nodeCollection.Find(bson.M{}).Limit(10000).Iter()
 83	err := iter.All(&nodes)
 84
 85	//convert []resp struct to json
 86	jsonNodes, err := json.Marshal(nodes)
 87	check(err)
 88
 89	fmt.Fprintln(w, string(jsonNodes))
 90}
 91func AddressNetwork(w http.ResponseWriter, r *http.Request) {
 92	ipFilter(w, r)
 93
 94	vars := mux.Vars(r)
 95	address := vars["address"]
 96	if address == "undefined" {
 97		fmt.Fprintln(w, "not valid address")
 98	} else {
 99		network := addressTree(address)
100
101		//convert []resp struct to json
102		jNetwork, err := json.Marshal(network)
103		check(err)
104
105		fmt.Fprintln(w, string(jNetwork))
106	}
107}
108func AddressSankey(w http.ResponseWriter, r *http.Request) {
109	ipFilter(w, r)
110
111	vars := mux.Vars(r)
112	address := vars["address"]
113	if address == "undefined" {
114		fmt.Fprintln(w, "not valid address")
115	} else {
116		network := addressTree(address)
117		var sankey SankeyModel
118
119		fmt.Println("network generated")
120		mapNodeK := make(map[string]int)
121		for k, n := range network.Nodes {
122			var sankeyNode SankeyNodeModel
123			//sankeyNode.StringNode = n.Id
124			sankeyNode.Node = k
125			sankeyNode.Name = n.Id
126			sankey.Nodes = append(sankey.Nodes, sankeyNode)
127			mapNodeK[n.Id] = k
128		}
129		for _, e := range network.Edges {
130			var sankeyLink SankeyLinkModel
131			//sankeyLink.StringSource = e.From
132			sankeyLink.Source = mapNodeK[e.From]
133			//sankeyLink.StringTarget = e.To
134			sankeyLink.Target = mapNodeK[e.To]
135			sankeyLink.Value = e.Label
136			sankey.Links = append(sankey.Links, sankeyLink)
137		}
138		fmt.Println("Sankey generated")
139
140		//convert []resp struct to json
141		jsonSankey, err := json.Marshal(sankey)
142		check(err)
143
144		fmt.Fprintln(w, string(jsonSankey))
145	}
146}
147func NetworkMap(w http.ResponseWriter, r *http.Request) {
148	ipFilter(w, r)
149
150	nodes, err := getAllNodes()
151	check(err)
152	edges, err := getAllEdges()
153	check(err)
154
155	var network NetworkModel
156	network.Nodes = nodes
157	network.Edges = edges
158
159	//convert []resp struct to json
160	jNetwork, err := json.Marshal(network)
161	check(err)
162
163	fmt.Fprintln(w, string(jNetwork))
164}
165
166/*
167func SelectItem(w http.ResponseWriter, r *http.Request) {
168	ipFilter(w, r)
169	vars := mux.Vars(r)
170	userid := vars["userid"]
171	itemid := vars["itemid"]
172	//find item
173	item, err := getItemById(itemid)
174	if err != nil {
175		fmt.Fprintln(w, "item "+itemid+" not found")
176	}
177
178	//find user
179	user, err := getUserById(userid)
180	if err != nil {
181		fmt.Fprintln(w, "user "+userid+" not found")
182	}
183
184	//increase TActed in item
185	item.TActed = item.TActed + 1
186
187	//save item
188	item, err = updateItem(item)
189	check(err)
190	fmt.Println(item)
191
192	//add item to []Actions of user
193	user.Actions = append(user.Actions, itemid)
194
195	//save user
196	user, err = updateUser(user)
197	check(err)
198	fmt.Println(user)
199
200	fmt.Fprintln(w, "user: "+userid+", selects item: "+itemid)
201}
202*/