diff --git a/account/serializers.py b/account/serializers.py index 5d688b4..2074c25 100644 --- a/account/serializers.py +++ b/account/serializers.py @@ -23,12 +23,28 @@ class GoogleLoginSerializer(serializers.Serializer): """meta class""" fields = ('access_token',) + +class UpdateJuniorProfileImageSerializer(serializers.ModelSerializer): + """Reset Password after verification""" + class Meta(object): + """Meta info""" + model = Junior + fields = ['image'] + + def update(self, instance, validated_data): + """update image """ + junior_image = validated_data.get('image', instance.image) + instance.image = junior_image + instance.save() + return instance + + class UpdateGuardianImageSerializer(serializers.ModelSerializer): """Reset Password after verification""" class Meta(object): """Meta info""" model = Guardian - fields = '__all__' + fields = ['image'] def update(self, instance, validated_data): """update image """ @@ -36,21 +52,7 @@ class UpdateGuardianImageSerializer(serializers.ModelSerializer): instance.save() return instance -class UpdateJuniorProfileImageSerializer(serializers.ModelSerializer): - """Reset Password after verification""" - class Meta(object): - """Meta info""" - model = Junior - fields = '__all__' - def update(self, instance, validated_data): - """update image """ - image = validated_data.get('image', instance.image) - filename = f"images/{image.name}" - image_url = upload_image_to_alibaba(image, filename) - instance.image = image_url - instance.save() - return instance class ResetPasswordSerializer(serializers.Serializer): """Reset Password after verification""" verification_code = serializers.CharField(max_length=10) diff --git a/account/views.py b/account/views.py index fd0cef2..33ebbbc 100644 --- a/account/views.py +++ b/account/views.py @@ -4,7 +4,9 @@ from rest_framework import viewsets, status, views from rest_framework.decorators import action import random import logging +from django.utils import timezone import jwt +from guardian.utils import upload_image_to_alibaba from django.contrib.auth import authenticate, login from guardian.models import Guardian from junior.models import Junior @@ -135,12 +137,22 @@ class SigninWithApple(views.APIView): class UpdateProfileImage(views.APIView): permission_classes = [IsAuthenticated] def put(self, request, format=None): - if request.data['user_type'] == '1': + if str(request.data['user_type']) == '1': junior_query = Junior.objects.filter(auth=request.user).last() - serializer = UpdateJuniorProfileImageSerializer(junior_query, data=request.data, partial=True) - else: + image = request.data['image'] + filename = f"images/{image.name}" + image_url = upload_image_to_alibaba(image, filename) + image_data = image_url + serializer = UpdateJuniorProfileImageSerializer(junior_query, + data={'image':image_data}, partial=True) + if str(request.data['user_type']) == '2': guardian_query = Guardian.objects.filter(user=request.user).last() - serializer = UpdateGuardianImageSerializer(guardian_query, data=request.data, partial=True) + image = request.data['image'] + filename = f"images/{image.name}" + image_url = upload_image_to_alibaba(image, filename) + image_data = image_url + serializer = UpdateGuardianImageSerializer(guardian_query, + data={'image':image_data}, partial=True) if serializer.is_valid(): serializer.save() return custom_response(SUCCESS_CODE['3017'], serializer.data, response_status=status.HTTP_200_OK) @@ -185,7 +197,7 @@ class ForgotPasswordAPIView(views.APIView): } ) - expiry = datetime.today() + timedelta(days=1) + expiry = timezone.now() + timezone.timedelta(days=1) user_data, created = UserEmailOtp.objects.get_or_create(email=email) if created: user_data.expired_at = expiry @@ -336,7 +348,7 @@ class ReSendEmailOtp(viewsets.ModelViewSet): def create(self, request, *args, **kwargs): otp = generate_otp() if User.objects.filter(email=request.data['email']): - expiry = datetime.today() + timedelta(days=1) + expiry = timezone.now() + timezone.timedelta(days=1) email_data, created = UserEmailOtp.objects.get_or_create(email=request.data['email']) if created: email_data.expired_at = expiry diff --git a/guardian/views.py b/guardian/views.py index 5418565..3238cdd 100644 --- a/guardian/views.py +++ b/guardian/views.py @@ -3,7 +3,8 @@ from rest_framework.permissions import IsAuthenticated from rest_framework import viewsets, status from rest_framework.pagination import PageNumberPagination -from django.db.models import Max +from django.contrib.auth.models import User +from django.utils import timezone from datetime import datetime, timedelta """Import Django app""" from .serializers import (UserSerializer, CreateGuardianSerializer, TaskSerializer, TaskDetailsSerializer, @@ -22,7 +23,6 @@ from django.db.models import Sum class SignupViewset(viewsets.ModelViewSet): """Signup view set""" serializer_class = UserSerializer - def create(self, request, *args, **kwargs): """Create user profile""" if request.data['user_type'] in ['1', '2']: @@ -31,7 +31,7 @@ class SignupViewset(viewsets.ModelViewSet): serializer.save() """Generate otp""" otp = generate_otp() - expiry = datetime.today() + timedelta(days=1) + expiry = timezone.now() + timezone.timedelta(days=1) UserEmailOtp.objects.create(email=request.data['email'], otp=otp, user_type=str(request.data['user_type']), expired_at=expiry) """Send email to the register user""" @@ -110,24 +110,45 @@ class CreateTaskAPIView(viewsets.ModelViewSet): return custom_response(SUCCESS_CODE['3018'], serializer.data, response_status=status.HTTP_200_OK) return custom_error_response(serializer.errors, response_status=status.HTTP_400_BAD_REQUEST) - class SearchTaskListAPIView(viewsets.ModelViewSet): """Update guardian profile""" serializer_class = TaskDetailsSerializer permission_classes = [IsAuthenticated] pagination_class = PageNumberPagination + def get_queryset(self): + """Get the queryset for the view""" + title = self.request.GET.get('title') + junior_queryset = JuniorTask.objects.filter(guardian__user=self.request.user, task_name__icontains=title)\ + .order_by('due_date', 'created_at') + return junior_queryset + def list(self, request, *args, **kwargs): """Create guardian profile""" - title = self.request.GET.get('title') - if title: - queryset = JuniorTask.objects.filter(guardian__user=request.user, task_name__icontains=title)\ - .order_by('due_date','created_at') + queryset = self.get_queryset() + paginator = self.pagination_class() paginated_queryset = paginator.paginate_queryset(queryset, request) + serializer = TaskDetailsSerializer(paginated_queryset, many=True) return custom_response(None, serializer.data, response_status=status.HTTP_200_OK) +# class SearchTaskListAPIView(viewsets.ModelViewSet): +# """Update guardian profile""" +# serializer_class = TaskDetailsSerializer +# permission_classes = [IsAuthenticated] +# pagination_class = PageNumberPagination +# +# def list(self, request, *args, **kwargs): +# """Create guardian profile""" +# title = self.request.GET.get('title') +# junior_queryset = JuniorTask.objects.filter(guardian__user=request.user, task_name__icontains=title)\ +# .order_by('due_date','created_at') +# paginator = self.pagination_class() +# queryset = paginator.paginate_queryset(junior_queryset, request) +# serializer = TaskDetailsSerializer(queryset, many=True) +# return custom_response(None, serializer.data, response_status=status.HTTP_200_OK) + class TopJuniorListAPIView(viewsets.ModelViewSet): """Top juniors list""" diff --git a/junior/migrations/0007_alter_junior_image.py b/junior/migrations/0007_alter_junior_image.py new file mode 100644 index 0000000..be695a0 --- /dev/null +++ b/junior/migrations/0007_alter_junior_image.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.2 on 2023-07-06 12:18 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('junior', '0006_alter_junior_country_name'), + ] + + operations = [ + migrations.AlterField( + model_name='junior', + name='image', + field=models.URLField(blank=True, default=None, null=True), + ), + ] diff --git a/junior/models.py b/junior/models.py index 331673f..2534b50 100644 --- a/junior/models.py +++ b/junior/models.py @@ -18,7 +18,7 @@ class Junior(models.Model): """Personal info""" gender = models.CharField(max_length=10, choices=GENDERS, null=True, blank=True, default=None) dob = models.DateField(max_length=15, null=True, blank=True, default=None) - image = models.ImageField(null=True, blank=True, default=None) + image = models.URLField(null=True, blank=True, default=None) """Codes""" junior_code = models.CharField(max_length=10, null=True, blank=True, default=None) guardian_code = ArrayField(models.CharField(max_length=10, null=True, blank=True, default=None),null=True)