jira-15 leader board API and profile API

This commit is contained in:
jain
2023-07-10 14:53:43 +05:30
parent 026bfb6da7
commit c8925aad8e
6 changed files with 45 additions and 13 deletions

View File

@ -120,7 +120,7 @@ class CreateGuardianSerializer(serializers.ModelSerializer):
image_url = upload_image_to_alibaba(image, filename) image_url = upload_image_to_alibaba(image, filename)
guardian.image = image_url guardian.image = image_url
"""Complete profile of the junior if below all data are filled""" """Complete profile of the junior if below all data are filled"""
complete_profile_field = all([guardian.phone, guardian.gender, guardian.family_name, guardian.country_name, complete_profile_field = all([guardian.phone, guardian.gender, guardian.country_name,
guardian.dob, guardian.country_code, user.first_name, user.last_name, guardian.dob, guardian.country_code, user.first_name, user.last_name,
user.email, guardian.image]) user.email, guardian.image])
guardian.is_complete_profile = False guardian.is_complete_profile = False
@ -188,18 +188,18 @@ class TaskDetailsSerializer(serializers.ModelSerializer):
class TopJuniorSerializer(serializers.ModelSerializer): class TopJuniorSerializer(serializers.ModelSerializer):
"""Top junior serializer""" """Top junior serializer"""
junior = JuniorDetailSerializer() junior = JuniorDetailSerializer()
position = serializers.SerializerMethodField() position = serializers.IntegerField()
class Meta(object): class Meta:
"""Meta info""" """Meta info"""
model = JuniorPoints model = JuniorPoints
fields = ['id', 'junior', 'total_task_points', 'position', 'created_at', 'updated_at'] fields = ['id', 'junior', 'total_task_points', 'position', 'created_at', 'updated_at']
def get_position(self, obj): def to_representation(self, instance):
"""get position of junior""" """Convert instance to representation"""
queryset = self.context['view'].get_queryset() representation = super().to_representation(instance)
position = list(queryset).index(obj) + 1 representation['position'] = instance.position
return position return representation
class GuardianProfileSerializer(serializers.ModelSerializer): class GuardianProfileSerializer(serializers.ModelSerializer):

View File

@ -143,7 +143,7 @@ class SearchTaskListAPIView(viewsets.ModelViewSet):
class TopJuniorListAPIView(viewsets.ModelViewSet): class TopJuniorListAPIView(viewsets.ModelViewSet):
"""Top juniors list""" """Top juniors list"""
serializer_class = TopJuniorSerializer serializer_class = TopJuniorSerializer
permission_classes = [IsAuthenticated] # permission_classes = [IsAuthenticated]
queryset = JuniorPoints.objects.all() queryset = JuniorPoints.objects.all()
def get_serializer_context(self): def get_serializer_context(self):
@ -152,8 +152,14 @@ class TopJuniorListAPIView(viewsets.ModelViewSet):
return context return context
def list(self, request, *args, **kwargs): def list(self, request, *args, **kwargs):
"""fetch junior list those complete their task""" """Fetch junior list of those who complete their tasks"""
junior_total_points = self.get_queryset().order_by('-total_task_points') junior_total_points = self.get_queryset().order_by('-total_task_points')
# Update the position field for each JuniorPoints object
for index, junior in enumerate(junior_total_points):
junior.position = index + 1
junior.save()
serializer = self.get_serializer(junior_total_points, many=True) serializer = self.get_serializer(junior_total_points, many=True)
return custom_response(serializer.data, response_status=status.HTTP_200_OK) return custom_response(serializer.data, response_status=status.HTTP_200_OK)

View File

@ -16,7 +16,7 @@ class JuniorAdmin(admin.ModelAdmin):
@admin.register(JuniorPoints) @admin.register(JuniorPoints)
class JuniorPointsAdmin(admin.ModelAdmin): class JuniorPointsAdmin(admin.ModelAdmin):
"""Junior Points Admin""" """Junior Points Admin"""
list_display = ['junior', 'total_task_points'] list_display = ['junior', 'total_task_points', 'position']
def __str__(self): def __str__(self):
"""Return email id""" """Return email id"""

View File

@ -0,0 +1,18 @@
# Generated by Django 4.2.2 on 2023-07-10 07:36
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('junior', '0008_juniorpoints'),
]
operations = [
migrations.AddField(
model_name='juniorpoints',
name='position',
field=models.IntegerField(blank=True, default=99999, null=True),
),
]

View File

@ -47,6 +47,8 @@ class JuniorPoints(models.Model):
junior = models.OneToOneField(Junior, on_delete=models.CASCADE, related_name='junior_points') junior = models.OneToOneField(Junior, on_delete=models.CASCADE, related_name='junior_points')
"""Contact details""" """Contact details"""
total_task_points = models.IntegerField(blank=True, null=True, default=0) total_task_points = models.IntegerField(blank=True, null=True, default=0)
"""position of the junior"""
position = models.IntegerField(blank=True, null=True, default=99999)
"""Profile created and updated time""" """Profile created and updated time"""
created_at = models.DateTimeField(auto_now_add=True) created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True) updated_at = models.DateTimeField(auto_now=True)

View File

@ -5,7 +5,7 @@ from django.contrib.auth.models import User
from django.db import transaction from django.db import transaction
import random import random
"""Import django app""" """Import django app"""
from junior.models import Junior from junior.models import Junior, JuniorPoints
from guardian.utils import upload_image_to_alibaba from guardian.utils import upload_image_to_alibaba
from base.messages import ERROR_CODE, SUCCESS_CODE from base.messages import ERROR_CODE, SUCCESS_CODE
from guardian.models import Guardian, JuniorTask from guardian.models import Guardian, JuniorTask
@ -147,6 +147,7 @@ class JuniorDetailListSerializer(serializers.ModelSerializer):
requested_task = serializers.SerializerMethodField('get_requested_task') requested_task = serializers.SerializerMethodField('get_requested_task')
rejected_task = serializers.SerializerMethodField('get_rejected_task') rejected_task = serializers.SerializerMethodField('get_rejected_task')
pending_task = serializers.SerializerMethodField('get_pending_task') pending_task = serializers.SerializerMethodField('get_pending_task')
position = serializers.SerializerMethodField('get_position')
def get_auth(self, obj): def get_auth(self, obj):
@ -162,6 +163,11 @@ class JuniorDetailListSerializer(serializers.ModelSerializer):
data = JuniorTask.objects.filter(junior=obj).count() data = JuniorTask.objects.filter(junior=obj).count()
return data return data
def get_position(self, obj):
data = JuniorPoints.objects.filter(junior=obj).last()
if data:
return data.position
return 99999
def get_points(self, obj): def get_points(self, obj):
data = sum(JuniorTask.objects.filter(junior=obj, task_status=COMPLETED).values_list('points', flat=True)) data = sum(JuniorTask.objects.filter(junior=obj, task_status=COMPLETED).values_list('points', flat=True))
return data return data
@ -192,7 +198,7 @@ class JuniorDetailListSerializer(serializers.ModelSerializer):
fields = ['id', 'email', 'first_name', 'last_name', 'country_code', 'phone', 'gender', 'dob', fields = ['id', 'email', 'first_name', 'last_name', 'country_code', 'phone', 'gender', 'dob',
'guardian_code', 'referral_code','is_active', 'is_complete_profile', 'created_at', 'image', 'guardian_code', 'referral_code','is_active', 'is_complete_profile', 'created_at', 'image',
'updated_at', 'assigned_task','points', 'pending_task', 'in_progress_task', 'completed_task', 'updated_at', 'assigned_task','points', 'pending_task', 'in_progress_task', 'completed_task',
'requested_task', 'rejected_task'] 'requested_task', 'rejected_task', 'position']
class JuniorProfileSerializer(serializers.ModelSerializer): class JuniorProfileSerializer(serializers.ModelSerializer):
"""junior serializer""" """junior serializer"""