Skip to content

Commit ca681c2

Browse files
author
Mike Nikles
committed
Add DELETE endpoint.
1 parent e7d5fcd commit ca681c2

File tree

6 files changed

+65
-17
lines changed

6 files changed

+65
-17
lines changed

src/global.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/// <reference types="@sveltejs/kit" />
22

33
type Todo = {
4+
uid: string;
45
created_at: Date;
56
text: string;
67
done: boolean;

src/hooks.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import type { Handle } from "@sveltejs/kit";
2+
3+
export const handle: Handle = async ({ request, resolve }) => {
4+
if (request.query.has("_method")) {
5+
request.method = request.query.get("_method").toUpperCase();
6+
}
7+
8+
const response = await resolve(request);
9+
return response;
10+
};

src/lib/todo-item.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@
9393
<button aria-label="Save todo" class="save"></button>
9494
</form>
9595

96-
<form action="" method="">
96+
<form action="/todos/{todo.uid}.json?_method=delete" method="post">
9797
<button aria-label="Delete todo" class="delete"></button>
9898
</form>
9999
</div>

src/routes/todos/[uid].json.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import type { RequestHandler } from "@sveltejs/kit";
2+
import { api } from "./_api";
3+
4+
export const del: RequestHandler = (request) => {
5+
return api(request);
6+
}

src/routes/todos/_api.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import type { Request } from "@sveltejs/kit";
2+
3+
// TODO: Persist in database
4+
let todos: Todo[] = [];
5+
6+
export const api = (request: Request, todo?: Todo) => {
7+
let body = {};
8+
let status = 500;
9+
10+
switch (request.method.toUpperCase()) {
11+
case "GET":
12+
body = todos;
13+
status = 200;
14+
break;
15+
case "POST":
16+
todos.push(todo);
17+
body = todo;
18+
status = 201;
19+
break;
20+
case "DELETE":
21+
todos = todos.filter(todo => todo.uid !== request.params.uid)
22+
status = 200;
23+
break;
24+
25+
default:
26+
break;
27+
}
28+
29+
if (request.method.toUpperCase() !== "GET") {
30+
return {
31+
status: 303,
32+
headers: {
33+
location: "/"
34+
}
35+
};
36+
}
37+
38+
return {
39+
status,
40+
body
41+
}
42+
}

src/routes/todos/index.json.ts

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,15 @@
11
import type { RequestHandler } from "@sveltejs/kit";
2+
import { api } from "./_api";
23

3-
// TODO: Persist in database
4-
let todos: Todo[] = [];
5-
6-
export const get: RequestHandler = () => {
7-
return {
8-
status: 200,
9-
body: todos
10-
}
4+
export const get: RequestHandler = (request) => {
5+
return api(request);
116
}
127

138
export const post: RequestHandler<{}, FormData> = (request) => {
14-
todos.push({
9+
return api(request, {
10+
uid: `${Date.now()}`, // TODO: Replace with the UID from the datbase
1511
created_at: new Date(),
1612
text: request.body.get("text"),
1713
done: false
1814
});
19-
20-
return {
21-
status: 303,
22-
headers: {
23-
location: "/"
24-
}
25-
}
2615
}

0 commit comments

Comments
 (0)