From 3d4e510540cc8d6778e249f66de6fe67e34920ad Mon Sep 17 00:00:00 2001 From: srikaaviya <107148069+srikaaviya@users.noreply.github.com> Date: Thu, 24 Jul 2025 15:32:37 -0700 Subject: [PATCH 01/13] corrected click version in requirements.txt to 8.1.8 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 4c9c661..1de6d21 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ asgiref==3.8.1 Brotli==1.1.0 -click==8.2.1 +click==8.1.8 colorama==0.4.6 dj-database-url==3.0.0 Django==5.2.3 From c1a38bf60f79e27ef1e85cc63c7f24d07a756830 Mon Sep 17 00:00:00 2001 From: srikaaviya <107148069+srikaaviya@users.noreply.github.com> Date: Thu, 24 Jul 2025 15:35:36 -0700 Subject: [PATCH 02/13] added is_overdue field to TaskSerializer --- tasks/serializers.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tasks/serializers.py b/tasks/serializers.py index 0334111..76930a7 100644 --- a/tasks/serializers.py +++ b/tasks/serializers.py @@ -6,7 +6,7 @@ class TaskSerializer(serializers.ModelSerializer): Serializer for Task Model Convierte entre instancias de Task y JSON """ - is_overdue = serializers.ReadOnlyField() + is_overdue = serializers.SerializerMethodField() user = serializers.StringRelatedField(read_only=True) @@ -24,6 +24,8 @@ class Meta: 'is_overdue' ] read_only_fields = ['id', 'created_at', 'updated_at', 'user'] + def get_is_overdue(self, obj): + return obj.due_date and obj.due_date < date.today() class TaskCreateUpdateSerializer(serializers.ModelSerializer): """ @@ -47,4 +49,4 @@ def validate_title(self, value): """Validación personalizada para título""" if not value or not value.strip(): raise serializers.ValidationError("Title cannot be empty") - return value.strip() \ No newline at end of file + return value.strip() From d5cdb25540cd5869329c1ef97f3299b22214a905 Mon Sep 17 00:00:00 2001 From: srikaaviya <107148069+srikaaviya@users.noreply.github.com> Date: Thu, 24 Jul 2025 16:16:30 -0700 Subject: [PATCH 03/13] Django version requirements.txt --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 1de6d21..807c265 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,7 @@ Brotli==1.1.0 click==8.1.8 colorama==0.4.6 dj-database-url==3.0.0 -Django==5.2.3 +Django==4.2.23 djangorestframework==3.16.0 gunicorn==23.0.0 h11==0.16.0 From 85df7ae4f5a0f5d9d43e75b5caac8b73d3e4713d Mon Sep 17 00:00:00 2001 From: srikaaviya <107148069+srikaaviya@users.noreply.github.com> Date: Thu, 24 Jul 2025 16:22:35 -0700 Subject: [PATCH 04/13] psycopg2 version requirements.txt --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 807c265..b45a49c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,7 @@ djangorestframework==3.16.0 gunicorn==23.0.0 h11==0.16.0 packaging==25.0 -psycopg2-binary==2.9.10 +psycopg2-binary==2.9.9 python-decouple==3.8 sqlparse==0.5.3 typing_extensions==4.14.0 From db1d1fbd00291348c3ce65e310b0d131805250a6 Mon Sep 17 00:00:00 2001 From: srikaaviya <107148069+srikaaviya@users.noreply.github.com> Date: Fri, 25 Jul 2025 12:19:23 -0700 Subject: [PATCH 05/13] permission allow in settings.py --- task_management/settings.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/task_management/settings.py b/task_management/settings.py index 0530f60..91aa74e 100644 --- a/task_management/settings.py +++ b/task_management/settings.py @@ -135,7 +135,8 @@ REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': [ - 'rest_framework.permissions.IsAuthenticated', + # 'rest_framework.permissions.IsAuthenticated', + 'rest_framework.permissions.AllowAny', ], 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.SessionAuthentication', From eecff124970690e61348f2717b3fe2b55257cf10 Mon Sep 17 00:00:00 2001 From: srikaaviya <107148069+srikaaviya@users.noreply.github.com> Date: Fri, 25 Jul 2025 12:20:40 -0700 Subject: [PATCH 06/13] permission allow in views.py --- tasks/views.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tasks/views.py b/tasks/views.py index 18e1680..acbcf22 100644 --- a/tasks/views.py +++ b/tasks/views.py @@ -433,7 +433,8 @@ class TaskListAPIView(generics.ListCreateAPIView): """ API para listar tareas (GET) y crear nuevas tareas (POST) """ - permission_classes = [IsAuthenticated] + # permission_classes = [IsAuthenticated] + permission_classes = [AllowAny] serializer_class = TaskSerializer def get_queryset(self): @@ -455,7 +456,8 @@ class TaskDetailAPIView(generics.RetrieveUpdateDestroyAPIView): """ API para obtener (GET), actualizar (PUT) o eliminar (DELETE) una tarea específica """ - permission_classes = [IsAuthenticated] + # permission_classes = [IsAuthenticated] + permission_classes = [AllowAny] serializer_class = TaskSerializer lookup_field = 'id' From b5bfb94ea28f2216724b7d87b9129403cc78cdcd Mon Sep 17 00:00:00 2001 From: srikaaviya <107148069+srikaaviya@users.noreply.github.com> Date: Fri, 25 Jul 2025 12:24:38 -0700 Subject: [PATCH 07/13] permission views.py --- tasks/views.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tasks/views.py b/tasks/views.py index acbcf22..8d27890 100644 --- a/tasks/views.py +++ b/tasks/views.py @@ -9,6 +9,7 @@ from rest_framework.permissions import IsAuthenticated from .serializers import TaskSerializer, TaskCreateUpdateSerializer from rest_framework import generics +from rest_framework.permissions import AllowAny from django.shortcuts import render, redirect, get_object_or_404 from django.contrib.auth.forms import UserCreationForm, AuthenticationForm From ab723c71c1021236fd2cbfcd25e90136d32f1ae1 Mon Sep 17 00:00:00 2001 From: srikaaviya <107148069+srikaaviya@users.noreply.github.com> Date: Fri, 25 Jul 2025 12:57:42 -0700 Subject: [PATCH 08/13] permission access in models.py --- tasks/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/models.py b/tasks/models.py index e42264c..a869b1a 100644 --- a/tasks/models.py +++ b/tasks/models.py @@ -20,7 +20,7 @@ class Status(models.TextChoices): due_date = models.DateTimeField(null=True, blank=True, verbose_name='Due Date') priority = models.CharField(max_length=10, choices=Priority.choices, default=Priority.LOW) status = models.CharField(max_length=20, choices=Status.choices, default=Status.PENDING) - user = models.ForeignKey(User, on_delete=models.CASCADE) + user = models.ForeignKey(User, on_delete=models.CASCADE, blank= True, null=True) def __str__(self): return f"{self.title} by: {self.user.username}" From d14f0d4a2800a50acb3fa770d6e57b6454e0e636 Mon Sep 17 00:00:00 2001 From: srikaaviya <107148069+srikaaviya@users.noreply.github.com> Date: Fri, 25 Jul 2025 13:03:17 -0700 Subject: [PATCH 09/13] Update views.py --- tasks/views.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tasks/views.py b/tasks/views.py index 8d27890..62733d9 100644 --- a/tasks/views.py +++ b/tasks/views.py @@ -450,7 +450,8 @@ def get_serializer_class(self): def perform_create(self, serializer): """Asignar usuario al crear tarea""" - serializer.save(user=self.request.user) + # serializer.save(user=self.request.user) + serializer.save(user=None) class TaskDetailAPIView(generics.RetrieveUpdateDestroyAPIView): From 15aea4d006bc05d89314869a1c1c27c9733b148b Mon Sep 17 00:00:00 2001 From: srikaaviya <107148069+srikaaviya@users.noreply.github.com> Date: Sat, 26 Jul 2025 05:31:59 -0700 Subject: [PATCH 10/13] back to original in views.py --- tasks/views.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/tasks/views.py b/tasks/views.py index 62733d9..3382587 100644 --- a/tasks/views.py +++ b/tasks/views.py @@ -9,7 +9,6 @@ from rest_framework.permissions import IsAuthenticated from .serializers import TaskSerializer, TaskCreateUpdateSerializer from rest_framework import generics -from rest_framework.permissions import AllowAny from django.shortcuts import render, redirect, get_object_or_404 from django.contrib.auth.forms import UserCreationForm, AuthenticationForm @@ -434,8 +433,8 @@ class TaskListAPIView(generics.ListCreateAPIView): """ API para listar tareas (GET) y crear nuevas tareas (POST) """ - # permission_classes = [IsAuthenticated] - permission_classes = [AllowAny] + permission_classes = [IsAuthenticated] + # permission_classes = [AllowAny] serializer_class = TaskSerializer def get_queryset(self): @@ -450,16 +449,16 @@ def get_serializer_class(self): def perform_create(self, serializer): """Asignar usuario al crear tarea""" - # serializer.save(user=self.request.user) - serializer.save(user=None) + serializer.save(user=self.request.user) + # serializer.save(user=None) class TaskDetailAPIView(generics.RetrieveUpdateDestroyAPIView): """ API para obtener (GET), actualizar (PUT) o eliminar (DELETE) una tarea específica """ - # permission_classes = [IsAuthenticated] - permission_classes = [AllowAny] + permission_classes = [IsAuthenticated] + # permission_classes = [AllowAny] serializer_class = TaskSerializer lookup_field = 'id' From 4849c8b20882bd72a4cff6cf5024f9d92bff0b29 Mon Sep 17 00:00:00 2001 From: srikaaviya <107148069+srikaaviya@users.noreply.github.com> Date: Sat, 26 Jul 2025 05:32:43 -0700 Subject: [PATCH 11/13] back to settings.py --- task_management/settings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/task_management/settings.py b/task_management/settings.py index 91aa74e..fa412ec 100644 --- a/task_management/settings.py +++ b/task_management/settings.py @@ -135,8 +135,8 @@ REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': [ - # 'rest_framework.permissions.IsAuthenticated', - 'rest_framework.permissions.AllowAny', + 'rest_framework.permissions.IsAuthenticated', + # 'rest_framework.permissions.AllowAny', ], 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.SessionAuthentication', From 1f2e5d418d74063dad57fdd558c42e9f5b941c65 Mon Sep 17 00:00:00 2001 From: srikaaviya <107148069+srikaaviya@users.noreply.github.com> Date: Sat, 26 Jul 2025 17:02:18 -0700 Subject: [PATCH 12/13] red badge added in tasks.html --- tasks/templates/tasks.html | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tasks/templates/tasks.html b/tasks/templates/tasks.html index c40b7f6..32cd703 100644 --- a/tasks/templates/tasks.html +++ b/tasks/templates/tasks.html @@ -63,6 +63,10 @@