diff --git a/task/serializers.py b/task/serializers.py index d395e18..452b6c9 100644 --- a/task/serializers.py +++ b/task/serializers.py @@ -6,8 +6,13 @@ class TaskSerializer(serializers.ModelSerializer): task_status = serializers.SerializerMethodField() def get_task_status(self, instance): - return instance.get_task_status + user = self.context['request'].user + return instance.get_task_status(user) class Meta: model = Task fields = ["task_name", "team", "detail", "task_status"] + + +class ProgressSerializer(serializers.Serializer): + progress = serializers.FloatField() \ No newline at end of file diff --git a/task/urls.py b/task/urls.py index c102b62..252dd5d 100644 --- a/task/urls.py +++ b/task/urls.py @@ -1,9 +1,10 @@ from django.urls import path -from .views import TaskListCreateAPIView +from .views import TaskListCreateAPIView, ProgressAPIView app_name = 'task' urlpatterns = [ - path('', TaskListCreateAPIView.as_view(), name='topic-list-create') + path('', TaskListCreateAPIView.as_view(), name='topic-list-create'), + path('progress/', ProgressAPIView.as_view(), name='task_progress'), ] diff --git a/task/views.py b/task/views.py index 919a46c..bd10390 100644 --- a/task/views.py +++ b/task/views.py @@ -1,8 +1,8 @@ from rest_framework import generics from rest_framework_simplejwt.authentication import JWTAuthentication -from .models import Task -from .serializers import TaskSerializer +from .models import Task, TaskStatus +from .serializers import TaskSerializer, ProgressSerializer from user.models import Member from user.apis.permissions import CustomPermissionMixin @@ -24,4 +24,24 @@ def get_queryset(self): return queryset.filter(team=team) -#Task Status cannot be created. It can only be updated. +#Task Status cannot be created. It can only be updated. + +class ProgressAPIView(CustomPermissionMixin, generics.RetrieveAPIView): + authentication_classes = [JWTAuthentication] + serializer_class = ProgressSerializer + + def get_object(self): + user = self.request.user + try: + member = Member.objects.get(user=user.id, acceptance_status=True) + team = member.team + except Member.DoesNotExist: + return {'progress': 0} + + total_tasks = Task.objects.filter(team=team).count() + if total_tasks == 0: + return {'progress': 0} + + verified_tasks = TaskStatus.objects.filter(member=member, status=TaskStatus.Choices.VERIFIED).count() + progress = (verified_tasks / total_tasks) * 100 + return {'progress': progress}