Skip to content

Commit 6b5e86e

Browse files
committed
feat(move): add move service, more danger, be careful
1 parent e149429 commit 6b5e86e

File tree

4 files changed

+76
-17
lines changed

4 files changed

+76
-17
lines changed

README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,17 @@ curl -X "PUT" "http://localhost:8787/v1/db/ab" -d '{"value": "a banana"}'
4747
*/
4848

4949
curl -X "GET" "http://localhost:8787/v1/search/a"
50+
51+
/*
52+
!!Danger Zone
53+
move = db (DELETE + POST/PUT)
54+
55+
@move service
56+
@path: /v1/move
57+
@methods: PUT
58+
*/
59+
60+
curl -X "PUT" "http://localhost:8787/v1/move/a" -d '{"newKey": "bpple", "value": "a banana"}'
5061
```
5162

5263
## Deploy

api.js

Lines changed: 53 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ const NS = SUB;
22

33
const apiMethods = ["GET", "POST", "PUT", "DELETE", "OPTIONS"];
44
const apiVersion = ["v1", "v2"];
5-
const apiService = ["db", "search"];
5+
const apiService = ["db", "search", "move"];
66

77
const DEFAULT_SECURITY_HEADERS = {
88
/*
@@ -91,11 +91,12 @@ async function handleRequest(request) {
9191
if (apiService.indexOf(service) !== -1) {
9292

9393
const key = args[3];
94+
95+
const postBody = request.body
9496
switch (service) {
9597
case "db":
9698
if (key) {
97-
const postBody = request.body
98-
const example = `msg: POST/PUT object example {"value": "https://example.com"}`
99+
const dbErrMsg = `msg: POST/PUT object example {"value": "https://example.com"}`
99100
const value = await NS.get(key)
100101
switch (method) {
101102
case "GET":
@@ -108,7 +109,7 @@ async function handleRequest(request) {
108109
try {
109110
postObj = await request.json()
110111
} catch (e) {
111-
return new Response(example, initHeader(400))
112+
return new Response(dbErrMsg, initHeader(400))
112113
}
113114

114115
if (postBody) {
@@ -121,15 +122,15 @@ async function handleRequest(request) {
121122
return new Response(JsonBody("value in POST object not found"), initHeader(404))
122123
}
123124
}
124-
return new Response(example, initHeader(400))
125+
return new Response(dbErrMsg, initHeader(400))
125126
case "PUT":
126127
if (!value) return new Response(JsonBody(`${key} not exists, please create it`), initHeader(404))
127128

128129
let putObj
129130
try {
130131
putObj = await request.json()
131132
} catch (e) {
132-
return new Response(example, initHeader(400))
133+
return new Response(dbErrMsg, initHeader(400))
133134
}
134135

135136
if (postBody) {
@@ -141,7 +142,7 @@ async function handleRequest(request) {
141142
}
142143
}
143144
}
144-
return new Response(example, initHeader(400))
145+
return new Response(dbErrMsg, initHeader(400))
145146
case "DELETE":
146147
if (!value) return new Response(JsonBody(`${key} not exists, delete noting`), initHeader(404))
147148

@@ -151,7 +152,7 @@ async function handleRequest(request) {
151152
return new Response(JsonBody(`Method ${method} not allowed.`), { status: 405, headers: { Allow: "GET,POST,PUT,DELETE" } });
152153
}
153154
}
154-
return new Response(JsonBody("Query key not valid"), initHeader(403));
155+
return new Response(JsonBody("Key not valid"), initHeader(403));
155156
case "search":
156157
if (method !== "GET") return new Response(JsonBody(`Method ${method} not allowed.`), { status: 405, headers: { Allow: "GET" } });
157158

@@ -161,7 +162,50 @@ async function handleRequest(request) {
161162
if (listKeys) return new Response(JSON.stringify(listKeys, null, 2), { status: 200 });
162163
return new Response(JsonBody("List is empty"), { status: 404 });
163164
}
164-
return new Response(JsonBody("Query key not valid"), initHeader(403));
165+
return new Response(JsonBody("Key not valid"), initHeader(403));
166+
case "move":
167+
console.log(`move: ${key}`)
168+
// Github Copilot, I love you
169+
if (method !== "PUT") return new Response(JsonBody(`Method ${method} not allowed.`), { status: 405, headers: { Allow: "PUT" } });
170+
171+
if (key) {
172+
if (postBody) {
173+
const moveErrMsg = `msg: PUT object example {"newKey": "bpple", "value": "if you want change value at once, add me"}`
174+
175+
let moveObj
176+
try {
177+
moveObj = await request.json()
178+
} catch (e) {
179+
return new Response(moveErrMsg, initHeader(400))
180+
}
181+
182+
if (moveObj) {
183+
const newKey = moveObj["newKey"];
184+
if (newKey) {
185+
const newValue = moveObj["value"];
186+
if (newValue) {
187+
await NS.delete(key)
188+
await NS.put(newKey, newValue)
189+
return new Response(JsonBody(newValue, newKey), initHeader(201))
190+
}
191+
192+
const value = await NS.get(key)
193+
if (value) {
194+
await NS.delete(key)
195+
await NS.put(newKey, value)
196+
return new Response(JsonBody(value, newKey), initHeader(201))
197+
}
198+
return new Response(JsonBody(`${key} not exists, can't move it`), initHeader(404))
199+
}
200+
return new Response(JsonBody("newKey in move object not found"), initHeader(404))
201+
}
202+
return new Response(JsonBody("move object not found"), initHeader(404))
203+
}
204+
return new Response(moveErrMsg, initHeader(400))
205+
}
206+
return new Response(JsonBody("Key not valid"), initHeader(403));
207+
default:
208+
return new Response(JsonBody("Service mismatched"), initHeader(500));
165209
}
166210
}
167211
return new Response(JsonBody("Service mismatched"), initHeader(500));

api.prod.js

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,12 @@ async function handleRequest(request) {
9191
if (apiService.indexOf(service) !== -1) {
9292

9393
const key = args[3];
94+
95+
const postBody = request.body
9496
switch (service) {
9597
case "db":
9698
if (key) {
97-
const postBody = request.body
98-
const example = `msg: POST/PUT object example {"value": "https://example.com"}`
99+
const dbErrMsg = `msg: POST/PUT object example {"value": "https://example.com"}`
99100
const value = await NS.get(key)
100101
switch (method) {
101102
case "GET":
@@ -108,7 +109,7 @@ async function handleRequest(request) {
108109
try {
109110
postObj = await request.json()
110111
} catch (e) {
111-
return new Response(example, initHeader(400))
112+
return new Response(dbErrMsg, initHeader(400))
112113
}
113114

114115
if (postBody) {
@@ -121,12 +122,12 @@ async function handleRequest(request) {
121122
return new Response(JsonBody("value in POST object not found"), initHeader(404))
122123
}
123124
}
124-
return new Response(example, initHeader(400))
125+
return new Response(dbErrMsg, initHeader(400))
125126
default:
126-
return new Response(JsonBody(`Method ${method} not allowed.`), { status: 405, headers: { Allow: "GET,POST" } });
127+
return new Response(JsonBody(`Method ${method} not allowed.`), { status: 405, headers: { Allow: "GET,POST,PUT,DELETE" } });
127128
}
128129
}
129-
return new Response(JsonBody("Query key not valid"), initHeader(403));
130+
return new Response(JsonBody("Key not valid"), initHeader(403));
130131
case "search":
131132
if (method !== "GET") return new Response(JsonBody(`Method ${method} not allowed.`), { status: 405, headers: { Allow: "GET" } });
132133

@@ -136,7 +137,9 @@ async function handleRequest(request) {
136137
if (listKeys) return new Response(JSON.stringify(listKeys, null, 2), { status: 200 });
137138
return new Response(JsonBody("List is empty"), { status: 404 });
138139
}
139-
return new Response(JsonBody("Query key not valid"), initHeader(403));
140+
return new Response(JsonBody("Key not valid"), initHeader(403));
141+
default:
142+
return new Response(JsonBody("Service mismatched"), initHeader(500));
140143
}
141144
}
142145
return new Response(JsonBody("Service mismatched"), initHeader(500));

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
"description": "api implementation to manage Cloudflare Workers KV",
55
"main": "api.js",
66
"scripts": {
7-
"dev": "miniflare api.js -k SUB"
7+
"dev": "miniflare api.js -k SUB",
8+
"prod": "miniflare api.prod.js -k SUB"
89
},
910
"repository": {
1011
"type": "git",

0 commit comments

Comments
 (0)