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*/