Skip to content

Commit 9b0b7d5

Browse files
committed
task feature
1 parent e2f03bf commit 9b0b7d5

File tree

5 files changed

+78
-7
lines changed

5 files changed

+78
-7
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 4.2.4 on 2023-08-23 18:07
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("task_app", "0002_alter_category_options"),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name="task",
15+
name="deadline",
16+
field=models.DateTimeField(blank=True, null=True),
17+
),
18+
]

src/task_app/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class Task(models.Model):
4141
description = models.TextField()
4242
priority = models.IntegerField(choices=PRIORITY_CHOICES, default=2)
4343
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='To Do')
44-
deadline = models.DateTimeField()
44+
deadline = models.DateTimeField(null=True, blank=True)
4545
category = models.ForeignKey(Category, null=True, blank=True, on_delete=models.SET_NULL)
4646
tags = models.ManyToManyField(Tag, blank=True)
4747
created_at = models.DateTimeField(auto_now_add=True)

src/task_app/urls.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,8 @@
22
from .views import *
33

44
urlpatterns = [
5-
path("task/", TaskView.as_view(), name="tasks")
5+
path("task_view/", TaskView.as_view()),
6+
path("task_detail/<str:pk>/", TaskDetail.as_view()),
7+
path("tag_view/", TagView.as_view()),
8+
path("tag_detail/<str:pk>/", TaskDetail.as_view()),
69
]

src/task_app/views.py

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
1-
from django.shortcuts import render
1+
from django.shortcuts import render, get_list_or_404, get_object_or_404
22
from .serializers import *
33
from rest_framework.response import Response
4-
from .models import Task
4+
from .models import *
55
from rest_framework.views import APIView
66
from rest_framework import status
77
from django.contrib.auth import get_user_model
8-
from rest_framework.permissions import IsAdminUser
8+
from rest_framework.permissions import IsAdminUser, IsAuthenticated
9+
from .permissions import IsTaskOwner
910
from django.http import Http404
1011

1112

1213

1314
# Create your views here.
1415
class TaskView(APIView):
16+
permission_classes = [IsAuthenticated]
1517
"""
1618
list all task or create a new task
1719
"""
1820
def get(self, request, format=None):
19-
tasks = Task.objects.all()
21+
tasks = Task.objects.filter(user=request.user).order_by('priority', 'deadline')
2022
serializer = TaskSerializer(tasks, many=True)
2123
return Response(serializer.data)
2224

@@ -54,4 +56,48 @@ def put(self, request, pk, format=None):
5456
def delete(self, request, pk, format=None):
5557
task = self.get_object(pk)
5658
task.delete()
57-
return Response(status=status.HTTP_204_NO_CONTENT)
59+
return Response({
60+
"success": True,
61+
"message": "Task deleted"
62+
},status=status.HTTP_204_NO_CONTENT)
63+
64+
65+
class TagView(APIView):
66+
"""
67+
list all task or create a new task
68+
"""
69+
def get(self, request, format=None):
70+
tags = Tag.objects.all()
71+
serializer = TagSerializer(tags, many=True)
72+
return Response(serializer.data)
73+
74+
def post(self, request, format=None):
75+
serializer = TagSerializer(data=request.data)
76+
if serializer.is_valid():
77+
serializer.save()
78+
return Response(serializer.data, status=status.HTTP_201_CREATED)
79+
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
80+
81+
82+
class TagDetail(APIView):
83+
"""
84+
Retrieve, update or delete a snippet instance.
85+
"""
86+
def get_object(self, pk):
87+
try:
88+
return Tag.objects.get(pk=pk)
89+
except Tag.DoesNotExist:
90+
raise Http404
91+
92+
def get(self, request, pk, format=None):
93+
tag = self.get_object(pk)
94+
serializer = TagSerializer(tag)
95+
return Response(serializer.data)
96+
97+
def put(self, request, pk, format=None):
98+
tag = self.get_object(pk)
99+
serializer = TagSerializer(tag, data=request.data)
100+
if serializer.is_valid():
101+
serializer.save()
102+
return Response(serializer.data)
103+
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

src/taskflow/settings.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,10 @@
109109
'rest_framework.parsers.FormParser',
110110
'rest_framework.parsers.MultiPartParser',
111111
'rest_framework.parsers.JSONParser',
112+
],
113+
'DEFAULT_RENDERER_CLASSES': [
114+
"rest_framework.renderers.JSONRenderer",
115+
"rest_framework.renderers.BrowsableAPIRenderer",
112116
]
113117
}
114118

0 commit comments

Comments
 (0)