Skip to content

Commit 247e2c6

Browse files
committed
Update todo file
1 parent cbc594a commit 247e2c6

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

ch04/todos/todo.py

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
from fastapi import APIRouter, Path, HTTPException, status, Request, Depends
2+
from fastapi.templating import Jinja2Templates
3+
4+
from model import Todo, TodoItem, TodoItems
5+
6+
todo_router = APIRouter()
7+
8+
todo_list = []
9+
10+
templates = Jinja2Templates(directory="templates/")
11+
12+
13+
@todo_router.post("/todo")
14+
async def add_todo(request: Request, todo: Todo = Depends(Todo.as_form)):
15+
todo.id = len(todo_list) + 1
16+
todo_list.append(todo)
17+
return templates.TemplateResponse("todo.html",
18+
{
19+
"request": request,
20+
"todos": todo_list
21+
})
22+
23+
24+
@todo_router.get("/todo", response_model=TodoItems)
25+
async def retrieve_todo(request: Request):
26+
return templates.TemplateResponse("todo.html", {
27+
"request": request,
28+
"todos": todo_list
29+
})
30+
31+
32+
@todo_router.get("/todo/{todo_id}")
33+
async def get_single_todo(request: Request, todo_id: int = Path(..., title="The ID of the todo to retrieve.")):
34+
for todo in todo_list:
35+
if todo.id == todo_id:
36+
return templates.TemplateResponse("todo.html", {
37+
"request": request,
38+
"todo": todo
39+
})
40+
raise HTTPException(
41+
status_code=status.HTTP_404_NOT_FOUND,
42+
detail="Todo with supplied ID doesn't exist",
43+
)
44+
45+
46+
@todo_router.put("/todo/{todo_id}")
47+
async def update_todo(request: Request, todo_data: TodoItem,
48+
todo_id: int = Path(..., title="The ID of the todo to be updated.")):
49+
for todo in todo_list:
50+
if todo.id == todo_id:
51+
todo.item = todo_data.item
52+
return {
53+
"message": "Todo updated successfully."
54+
}
55+
56+
raise HTTPException(
57+
status_code=status.HTTP_404_NOT_FOUND,
58+
detail="Todo with supplied ID doesn't exist",
59+
)
60+
61+
62+
@todo_router.delete("/todo/{todo_id}")
63+
async def delete_single_todo(request: Request, todo_id: int):
64+
for index in range(len(todo_list)):
65+
todo = todo_list[index]
66+
if todo.id == todo_id:
67+
todo_list.pop(index)
68+
return {
69+
"message": "Todo deleted successfully."
70+
}
71+
raise HTTPException(
72+
status_code=status.HTTP_404_NOT_FOUND,
73+
detail="Todo with supplied ID doesn't exist",
74+
)
75+
76+
77+
@todo_router.delete("/todo")
78+
async def delete_all_todo():
79+
todo_list.clear()
80+
return {
81+
"message": "Todos deleted successfully."
82+
}

0 commit comments

Comments
 (0)