@@ -12,6 +12,7 @@ func homePageHandler(w http.ResponseWriter, r *http.Request) {
12
12
http .NotFound (w , r )
13
13
return
14
14
}
15
+ w .Header ().Set ("Content-Type" , "application/json" )
15
16
16
17
if r .Method == http .MethodGet {
17
18
var requestBody KeyValuePair
@@ -30,7 +31,6 @@ func homePageHandler(w http.ResponseWriter, r *http.Request) {
30
31
log .Printf ("Trying to find the key %s in node %+v" , requestKey , readFromNode )
31
32
keyValuePair , err := readDataFromSpecificNode (readFromNode , requestKey )
32
33
33
- w .Header ().Set ("Content-Type" , "application/json" )
34
34
if err == nil {
35
35
w .WriteHeader (http .StatusOK )
36
36
err = json .NewEncoder (w ).Encode (keyValuePair )
@@ -51,7 +51,6 @@ func homePageHandler(w http.ResponseWriter, r *http.Request) {
51
51
52
52
if body .Key == "" || body .Value == "" {
53
53
responseMessage := ResponseMessage {false ,"Key or value missing. No write or update performed" }
54
- w .Header ().Set ("Content-Type" , "application/json" )
55
54
w .WriteHeader (http .StatusBadRequest )
56
55
err = json .NewEncoder (w ).Encode (responseMessage )
57
56
return
@@ -77,20 +76,46 @@ func homePageHandler(w http.ResponseWriter, r *http.Request) {
77
76
} else {
78
77
log .Fatal (err )
79
78
}
79
+ } else if r .Method == http .MethodDelete {
80
+ var requestBody KeyValuePair
81
+ err := json .NewDecoder (r .Body ).Decode (& requestBody )
82
+ if err != nil {
83
+ http .Error (w , err .Error (), http .StatusBadRequest )
84
+ return
85
+ }
86
+ requestKey := requestBody .Key
87
+ log .Println ("Received request to delete key" , requestKey )
88
+ baseNode , err := addrToNode (CompleteBaseAddress ())
89
+ if err != nil {
90
+ log .Fatal ("Base node not found while searching for a key" )
91
+ }
92
+ deleteFromNode := findNode (baseNode , requestKey )
93
+ log .Printf ("Trying to delete the key %s from node %+v" , requestKey , deleteFromNode )
94
+ respMessage , err := deleteDataFromSpecificNode (deleteFromNode , requestKey )
95
+
96
+ if err == nil {
97
+ w .WriteHeader (http .StatusOK )
98
+ err = json .NewEncoder (w ).Encode (respMessage )
99
+ if err != nil {
100
+ log .Fatal (err )
101
+ }
102
+ } else {
103
+ log .Fatal (err )
104
+ }
80
105
} else {
81
106
http .Error (w , "Only use GET or PUT" , http .StatusMethodNotAllowed )
82
107
}
83
108
}
84
109
85
110
func directDataLevelCommunicationHandler (w http.ResponseWriter , r * http.Request ) {
111
+ w .Header ().Set ("Content-Type" , "application/json" )
86
112
if r .Method == http .MethodGet {
87
113
var requestBody KeyValuePair
88
114
err := json .NewDecoder (r .Body ).Decode (& requestBody )
89
115
if err != nil {
90
116
http .Error (w , err .Error (), http .StatusBadRequest )
91
117
return
92
118
}
93
- w .Header ().Set ("Content-Type" , "application/json" )
94
119
requestKey := requestBody .Key
95
120
log .Printf ("Checking if key %s is present in local store" , requestKey )
96
121
if val , ok := keyValueStore [requestKey ]; ok {
@@ -116,7 +141,6 @@ func directDataLevelCommunicationHandler(w http.ResponseWriter, r *http.Request)
116
141
117
142
if body .Key == "" || body .Value == "" {
118
143
responseMessage := ResponseMessage {false ,"Key or value missing. No write or update performed" }
119
- w .Header ().Set ("Content-Type" , "application/json" )
120
144
w .WriteHeader (http .StatusBadRequest )
121
145
err = json .NewEncoder (w ).Encode (responseMessage )
122
146
return
@@ -130,6 +154,21 @@ func directDataLevelCommunicationHandler(w http.ResponseWriter, r *http.Request)
130
154
if err != nil {
131
155
log .Fatal (err )
132
156
}
157
+ } else if r .Method == http .MethodDelete {
158
+ var requestBody KeyValuePair
159
+ err := json .NewDecoder (r .Body ).Decode (& requestBody )
160
+ if err != nil {
161
+ http .Error (w , err .Error (), http .StatusBadRequest )
162
+ return
163
+ }
164
+ requestKey := requestBody .Key
165
+ log .Printf ("Attempting to delete key %s if present" , requestKey )
166
+ delete (keyValueStore , requestKey )
167
+ w .WriteHeader (http .StatusOK )
168
+ err = json .NewEncoder (w ).Encode (ResponseMessage {true , fmt .Sprintf ("Key %s deleted" , requestKey )})
169
+ if err != nil {
170
+ log .Fatal (err )
171
+ }
133
172
} else {
134
173
http .Error (w , "Only use GET or PUT" , http .StatusMethodNotAllowed )
135
174
}
0 commit comments