diff --git a/junior/serializers.py b/junior/serializers.py index ef1b5de..011cf97 100644 --- a/junior/serializers.py +++ b/junior/serializers.py @@ -3,7 +3,7 @@ from rest_framework import serializers from django.contrib.auth.models import User from django.db import transaction -import random +from datetime import datetime from django.utils import timezone from rest_framework_simplejwt.tokens import RefreshToken @@ -306,3 +306,17 @@ class RemoveJuniorSerializer(serializers.ModelSerializer): instance.save() return instance + +class CompleteTaskSerializer(serializers.ModelSerializer): + """User task Serializer""" + class Meta(object): + """Meta class""" + model = JuniorTask + fields = ('id', 'image') + def update(self, instance, validated_data): + instance.image = validated_data.get('image', instance.image) + instance.requested_on = datetime.today() + instance.task_status = str(NUMBER['four']) + instance.is_approved = False + instance.save() + return instance diff --git a/junior/urls.py b/junior/urls.py index 33d52e7..013b497 100644 --- a/junior/urls.py +++ b/junior/urls.py @@ -2,7 +2,8 @@ """Django import""" from django.urls import path, include from .views import (UpdateJuniorProfile, ValidateGuardianCode, JuniorListAPIView, AddJuniorAPIView, - InvitedJuniorAPIView, FilterJuniorAPIView, RemoveJuniorAPIView, JuniorTaskListAPIView) + InvitedJuniorAPIView, FilterJuniorAPIView, RemoveJuniorAPIView, JuniorTaskListAPIView, + CompleteJuniorTaskAPIView) """Third party import""" from rest_framework import routers @@ -36,5 +37,6 @@ router.register('junior-task-list', JuniorTaskListAPIView, basename='junior-task # Define url pattern""" urlpatterns = [ path('api/v1/', include(router.urls)), - path('api/v1/remove-junior/', RemoveJuniorAPIView.as_view()) + path('api/v1/remove-junior/', RemoveJuniorAPIView.as_view()), + path('api/v1/complete-task/', CompleteJuniorTaskAPIView.as_view()) ] diff --git a/junior/views.py b/junior/views.py index 50e42be..6e4c494 100644 --- a/junior/views.py +++ b/junior/views.py @@ -17,7 +17,7 @@ from rest_framework.pagination import PageNumberPagination # Import account's task from junior.models import Junior from .serializers import (CreateJuniorSerializer, JuniorDetailListSerializer, AddJuniorSerializer,\ - RemoveJuniorSerializer) + RemoveJuniorSerializer, CompleteTaskSerializer) from guardian.models import Guardian, JuniorTask from guardian.serializers import TaskDetailsSerializer from base.messages import ERROR_CODE, SUCCESS_CODE @@ -164,7 +164,7 @@ class FilterJuniorAPIView(viewsets.ModelViewSet): class RemoveJuniorAPIView(views.APIView): - """Eater Update API""" + """Remove junior API""" serializer_class = RemoveJuniorSerializer model = Junior permission_classes = [IsAuthenticated] @@ -215,3 +215,30 @@ class JuniorTaskListAPIView(viewsets.ModelViewSet): # use TaskDetailsSerializer serializer serializer = TaskDetailsSerializer(paginated_queryset, many=True) return custom_response(None, serializer.data, response_status=status.HTTP_200_OK) + + +class CompleteJuniorTaskAPIView(views.APIView): + """Update junior task API""" + serializer_class = CompleteTaskSerializer + model = JuniorTask + permission_classes = [IsAuthenticated] + + def put(self, request, format=None): + task_id = self.request.data.get('task_id') + image = request.data['image'] + if image and image.size == NUMBER['zero']: + return custom_error_response(ERROR_CODE['2035'], response_status=status.HTTP_400_BAD_REQUEST) + filename = f"images/{image.name}" + image_url = upload_image_to_alibaba(image, filename) + # fetch junior query + task_queryset = JuniorTask.objects.filter(id=task_id, junior__auth__email=self.request.user).last() + if task_queryset: + # use RemoveJuniorSerializer serializer + serializer = CompleteTaskSerializer(task_queryset, data={'image': image_url}, partial=True) + if serializer.is_valid(): + # save serializer + serializer.save() + return custom_response(SUCCESS_CODE['3022'], serializer.data, 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['2034'], response_status=status.HTTP_400_BAD_REQUEST)