Skip to content

Commit 907818b

Browse files
committed
check list
1 parent 6a882d6 commit 907818b

File tree

7 files changed

+39
-9
lines changed

7 files changed

+39
-9
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ The ultimate goal of a task management application is to empower users to manage
1818

1919
# Objectives
2020

21-
- Task Creation and Organization:
22-
Allow users to create tasks easily and organize them based on different parameters such as due dates, priority, categories, and projects.
21+
- [x] Task Creation and Organization:
22+
Allow users to create tasks easily and organize them based on different parameters such as due dates, priority, categories, and projects.
2323

2424
- Task Tracking and Status Updates:
2525
Enable users to track the progress of their tasks, update task statuses (e.g., to-do, in progress, completed), and get a clear overview of tasks that need attention.

src/task_app/models.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
# Create your models here.
66

77
class Category(models.Model):
8+
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
89
name = models.CharField(max_length=50)
910

1011
def __str__(self):
@@ -16,6 +17,7 @@ class Meta:
1617

1718

1819
class Tag(models.Model):
20+
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
1921
name = models.CharField(max_length=50)
2022

2123
def __str__(self):

src/task_app/permissions.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,22 @@
11
# permissions.py
22
from rest_framework import permissions
3+
from django.utils import timezone
4+
35

46
class IsTaskOwner(permissions.BasePermission):
57
def has_object_permission(self, request, view, obj):
68
return obj.user == request.user
9+
10+
11+
class IsTaskOwnerAndNotPastDeadline(permissions.BasePermission):
12+
"""
13+
Custom permission to only allow the owner of a task to view or edit it if the deadline has not passed.
14+
"""
15+
16+
def has_object_permission(self, request, view, obj):
17+
# Check if the user is the owner of the task
18+
if obj.owner == request.user:
19+
# Check if the deadline has not passed
20+
if obj.deadline is None or obj.deadline > timezone.now():
21+
return True
22+
return False

src/task_app/serializers.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
from rest_framework import serializers
2-
from .models import Task, Category, Tag
2+
from .models import *
3+
from django.utils import timezone
34

45

56
class TaskSerializer(serializers.ModelSerializer):
7+
8+
def validate_deadline(self, value):
9+
if value and value <= timezone.now():
10+
raise serializers.ValidationError("Deadline must be in the future.")
11+
return value
612
class Meta:
713
model = Task
814
fields = "__all__"

src/task_app/views.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
# Create your views here.
1515
class TaskView(APIView):
16-
permission_classes = [IsAuthenticated]
16+
permission_classes = [IsTaskOwner, IsAuthenticated]
1717
"""
1818
list all task or create a new task
1919
"""
@@ -31,6 +31,7 @@ def post(self, request, format=None):
3131

3232

3333
class TaskDetail(APIView):
34+
permission_classes = [IsAuthenticated]
3435
"""
3536
Retrieve, update or delete a snippet instance.
3637
"""
@@ -63,11 +64,12 @@ def delete(self, request, pk, format=None):
6364

6465

6566
class TagView(APIView):
67+
permission_classes = [IsAuthenticated]
6668
"""
6769
list all task or create a new task
6870
"""
6971
def get(self, request, format=None):
70-
tags = Tag.objects.all()
72+
tags = Tag.objects.filter(user=request.user)
7173
serializer = TagSerializer(tags, many=True)
7274
return Response(serializer.data)
7375

@@ -80,6 +82,7 @@ def post(self, request, format=None):
8082

8183

8284
class TagDetail(APIView):
85+
permission_classes = [IsAuthenticated]
8386
"""
8487
Retrieve, update or delete a snippet instance.
8588
"""

src/taskflow/settings.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,4 +165,6 @@
165165
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
166166

167167
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
168-
DEFAULT_FROM_EMAIL = 'noreply@taskflow'
168+
DEFAULT_FROM_EMAIL = 'noreply@taskflow'
169+
170+
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 1 # Set the confirmation link expiration time in days

src/user_app/views.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def signUp(request):
4848

4949
data = {
5050
"status": "success",
51-
"message": "Request Successful",
51+
"message": "registration successful",
5252
"data": serializer.data
5353
}
5454
return Response(data, status=status.HTTP_201_CREATED)
@@ -58,15 +58,16 @@ class ConfirmEmailView(APIView):
5858

5959
queryset = get_user_model().objects.all()
6060
serializer_class = ConfirmEmailSerializer
61-
permission_classes = []
62-
61+
permission_classes = [AllowAny]
62+
6363
def get(self, request, uidb64, token):
6464
try:
6565
uid = smart_str(urlsafe_base64_decode(uidb64))
6666
user = get_user_model().objects.get(pk=uid)
6767
except (TypeError, ValueError, OverflowError, get_user_model().DoesNotExist):
6868
return Response({"error": "Invalid user ID"}, status=400)
6969

70+
print(default_token_generator.check_token(user, token), user, token)
7071
if default_token_generator.check_token(user, token):
7172
user.is_active = True
7273
user.is_verified = True

0 commit comments

Comments
 (0)