diff --git a/base/messages.py b/base/messages.py index 7bec3cc..61ee573 100644 --- a/base/messages.py +++ b/base/messages.py @@ -81,7 +81,8 @@ ERROR_CODE = { "2047": "Invalid Junior ID ", "2048": "Choose right file for image", "2049": "This task is already requested ", - "2059": "Already exist junior" + "2059": "Already exist junior", + "2060": "Task does not exist or not in pending state" } """Success message code""" SUCCESS_CODE = { @@ -129,7 +130,8 @@ SUCCESS_CODE = { "3031": "Article Survey has been removed successfully.", "3032": "Task request sent successfully", "3033": "Valid Referral code", - "3034": "Invite guardian successfully" + "3034": "Invite guardian successfully", + "3035": "Task started successfully" } """status code error""" STATUS_CODE_ERROR = { diff --git a/junior/serializers.py b/junior/serializers.py index 9b8a8fe..d2d6b6d 100644 --- a/junior/serializers.py +++ b/junior/serializers.py @@ -428,3 +428,14 @@ class AddGuardianSerializer(serializers.ModelSerializer): send_notification(INVITED_GUARDIAN, None, junior_data.auth.id, {}) send_notification(APPROVED_JUNIOR, None, email, {}) return instance + +class StartTaskSerializer(serializers.ModelSerializer): + """User task Serializer""" + class Meta(object): + """Meta class""" + model = JuniorTask + fields = ('id', 'task_status') + def update(self, instance, validated_data): + instance.task_status = str(NUMBER['two']) + instance.save() + return instance diff --git a/junior/urls.py b/junior/urls.py index bd3ed35..e4b2489 100644 --- a/junior/urls.py +++ b/junior/urls.py @@ -4,7 +4,7 @@ from django.urls import path, include from .views import (UpdateJuniorProfile, ValidateGuardianCode, JuniorListAPIView, AddJuniorAPIView, InvitedJuniorAPIView, FilterJuniorAPIView, RemoveJuniorAPIView, JuniorTaskListAPIView, CompleteJuniorTaskAPIView, JuniorPointsListAPIView, ValidateReferralCode, - InviteGuardianAPIView) + InviteGuardianAPIView, StartTaskAPIView) """Third party import""" from rest_framework import routers @@ -45,5 +45,6 @@ router.register('invite-guardian', InviteGuardianAPIView, basename='invite-guard urlpatterns = [ path('api/v1/', include(router.urls)), path('api/v1/remove-junior/', RemoveJuniorAPIView.as_view()), - path('api/v1/complete-task/', CompleteJuniorTaskAPIView.as_view()) + path('api/v1/complete-task/', CompleteJuniorTaskAPIView.as_view()), + path('api/v1/start-task/', StartTaskAPIView.as_view()) ] diff --git a/junior/views.py b/junior/views.py index aecbf80..acbb5b2 100644 --- a/junior/views.py +++ b/junior/views.py @@ -23,7 +23,7 @@ import requests from junior.models import Junior, JuniorPoints from .serializers import (CreateJuniorSerializer, JuniorDetailListSerializer, AddJuniorSerializer,\ RemoveJuniorSerializer, CompleteTaskSerializer, JuniorPointsSerializer, - AddGuardianSerializer) + AddGuardianSerializer, StartTaskSerializer) from guardian.models import Guardian, JuniorTask from guardian.serializers import TaskDetailsSerializer from base.messages import ERROR_CODE, SUCCESS_CODE @@ -97,6 +97,7 @@ class JuniorListAPIView(viewsets.ModelViewSet): serializer_class = JuniorDetailListSerializer queryset = Junior.objects.all() permission_classes = [IsAuthenticated] + http_method_names = ('get',) def list(self, request, *args, **kwargs): """ junior list""" @@ -115,6 +116,7 @@ class AddJuniorAPIView(viewsets.ModelViewSet): queryset = Junior.objects.all() serializer_class = AddJuniorSerializer permission_classes = [IsAuthenticated] + http_method_names = ('post',) def create(self, request, *args, **kwargs): """ junior list""" info = {'user': request.user, 'email': request.data['email'], 'first_name': request.data['first_name'], @@ -137,6 +139,7 @@ class InvitedJuniorAPIView(viewsets.ModelViewSet): queryset = Junior.objects.all() permission_classes = [IsAuthenticated] pagination_class = PageNumberPagination + http_method_names = ('get',) def get_queryset(self): """Get the queryset for the view""" @@ -161,6 +164,7 @@ class FilterJuniorAPIView(viewsets.ModelViewSet): permission_classes = [IsAuthenticated] pagination_class = PageNumberPagination queryset = Junior.objects.all() + http_method_names = ('get',) def get_queryset(self): """Get the queryset for the view""" @@ -212,6 +216,7 @@ class JuniorTaskListAPIView(viewsets.ModelViewSet): permission_classes = [IsAuthenticated] pagination_class = PageNumberPagination queryset = JuniorTask.objects.all() + http_method_names = ('get',) def list(self, request, *args, **kwargs): """Create guardian profile""" @@ -280,6 +285,7 @@ class JuniorPointsListAPIView(viewsets.ModelViewSet): """Junior Points viewset""" serializer_class = JuniorPointsSerializer permission_classes = [IsAuthenticated] + http_method_names = ('get',) def get_queryset(self): """get queryset""" @@ -295,6 +301,7 @@ class JuniorPointsListAPIView(viewsets.ModelViewSet): class ValidateReferralCode(viewsets.ViewSet): """Check guardian code exist or not""" permission_classes = [IsAuthenticated] + http_method_names = ('get',) def get_queryset(self): """Get queryset based on referral_code.""" @@ -321,7 +328,7 @@ class InviteGuardianAPIView(viewsets.ModelViewSet): """Invite guardian by junior""" serializer_class = AddGuardianSerializer permission_classes = [IsAuthenticated] - + http_method_names = ('post',) def create(self, request, *args, **kwargs): """ junior list""" info = {'user': request.user, 'email': request.data['email'], 'first_name': request.data['first_name'], @@ -333,3 +340,27 @@ class InviteGuardianAPIView(viewsets.ModelViewSet): serializer.save() return custom_response(SUCCESS_CODE['3034'], serializer.data, response_status=status.HTTP_200_OK) return custom_error_response(serializer.error, response_status=status.HTTP_400_BAD_REQUEST) + + +class StartTaskAPIView(views.APIView): + """Update junior task API""" + serializer_class = StartTaskSerializer + model = JuniorTask + permission_classes = [IsAuthenticated] + + def put(self, request, format=None): + try: + task_id = self.request.data.get('task_id') + task_queryset = JuniorTask.objects.filter(id=task_id, junior__auth__email=self.request.user).last() + if task_queryset and task_queryset.task_status == str(NUMBER['one']): + # use StartTaskSerializer serializer + serializer = StartTaskSerializer(task_queryset, data=request.data, partial=True) + if serializer.is_valid(): + # save serializer + serializer.save() + return custom_response(SUCCESS_CODE['3035'], None, response_status=status.HTTP_200_OK) + return custom_error_response(serializer.errors, response_status=status.HTTP_400_BAD_REQUEST) + else: + return custom_error_response(ERROR_CODE['2060'], response_status=status.HTTP_400_BAD_REQUEST) + except Exception as e: + return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST)