mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-07-15 18:07:02 +00:00
current page update in article api
This commit is contained in:
@ -270,14 +270,12 @@ class TopJuniorListAPIView(viewsets.ModelViewSet):
|
|||||||
"""Fetch junior list of those who complete their tasks"""
|
"""Fetch junior list of those who complete their tasks"""
|
||||||
try:
|
try:
|
||||||
junior_total_points = self.get_queryset().order_by('-total_points')
|
junior_total_points = self.get_queryset().order_by('-total_points')
|
||||||
|
|
||||||
# Update the position field for each JuniorPoints object
|
# Update the position field for each JuniorPoints object
|
||||||
for index, junior in enumerate(junior_total_points):
|
for index, junior in enumerate(junior_total_points):
|
||||||
junior.position = index + 1
|
junior.position = index + 1
|
||||||
send_notification.delay(LEADERBOARD_RANKING, None, junior.junior.auth.id, {})
|
send_notification.delay(LEADERBOARD_RANKING, None, junior.junior.auth.id, {})
|
||||||
junior.save()
|
junior.save()
|
||||||
|
serializer = self.get_serializer(junior_total_points[:15], many=True)
|
||||||
serializer = self.get_serializer(junior_total_points, many=True)
|
|
||||||
return custom_response(None, serializer.data, response_status=status.HTTP_200_OK)
|
return custom_response(None, serializer.data, response_status=status.HTTP_200_OK)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST)
|
return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
# Generated by Django 4.2.2 on 2023-08-10 08:53
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('junior', '0023_juniorarticlecard'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='juniorarticle',
|
||||||
|
name='current_card_page',
|
||||||
|
field=models.IntegerField(blank=True, default=0, null=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='juniorarticle',
|
||||||
|
name='current_que_page',
|
||||||
|
field=models.IntegerField(blank=True, default=0, null=True),
|
||||||
|
),
|
||||||
|
]
|
@ -173,6 +173,8 @@ class JuniorArticle(models.Model):
|
|||||||
# article completed"""
|
# article completed"""
|
||||||
is_completed = models.BooleanField(default=False)
|
is_completed = models.BooleanField(default=False)
|
||||||
status = models.CharField(max_length=10, choices=ARTICLE_STATUS, null=True, blank=True, default='1')
|
status = models.CharField(max_length=10, choices=ARTICLE_STATUS, null=True, blank=True, default='1')
|
||||||
|
current_card_page = models.IntegerField(blank=True, null=True, default=0)
|
||||||
|
current_que_page = models.IntegerField(blank=True, null=True, default=0)
|
||||||
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)
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ class JuniorDetailSerializer(serializers.ModelSerializer):
|
|||||||
"""Meta info"""
|
"""Meta info"""
|
||||||
model = Junior
|
model = Junior
|
||||||
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', 'is_invited', 'referral_code','is_active', 'is_complete_profile', 'created_at',
|
'guardian_code', 'image', 'is_invited', 'referral_code','is_active', 'is_complete_profile', 'created_at',
|
||||||
'image', 'updated_at']
|
'image', 'updated_at']
|
||||||
|
|
||||||
class JuniorDetailListSerializer(serializers.ModelSerializer):
|
class JuniorDetailListSerializer(serializers.ModelSerializer):
|
||||||
|
@ -4,6 +4,7 @@ from django.conf import settings
|
|||||||
"""Third party Django app"""
|
"""Third party Django app"""
|
||||||
from templated_email import send_templated_mail
|
from templated_email import send_templated_mail
|
||||||
from .models import JuniorPoints
|
from .models import JuniorPoints
|
||||||
|
from base.constants import NUMBER
|
||||||
from django.db.models import F
|
from django.db.models import F
|
||||||
# junior notification
|
# junior notification
|
||||||
# email for sending email
|
# email for sending email
|
||||||
@ -53,8 +54,8 @@ def update_positions_based_on_points():
|
|||||||
juniors_points = JuniorPoints.objects.order_by('-total_points', 'created_at')
|
juniors_points = JuniorPoints.objects.order_by('-total_points', 'created_at')
|
||||||
|
|
||||||
# Now, iterate through the queryset and update the position field based on the order.
|
# Now, iterate through the queryset and update the position field based on the order.
|
||||||
position = 1
|
position = NUMBER['one']
|
||||||
for junior_point in juniors_points:
|
for junior_point in juniors_points:
|
||||||
junior_point.position = position
|
junior_point.position = position
|
||||||
junior_point.save()
|
junior_point.save()
|
||||||
position += 1
|
position += NUMBER['one']
|
||||||
|
@ -481,7 +481,8 @@ class StartArticleAPIView(viewsets.ModelViewSet):
|
|||||||
article_id = request.data.get('article_id')
|
article_id = request.data.get('article_id')
|
||||||
article_data = Article.objects.filter(id=article_id).last()
|
article_data = Article.objects.filter(id=article_id).last()
|
||||||
if not JuniorArticle.objects.filter(junior=junior_instance, article=article_data).last():
|
if not JuniorArticle.objects.filter(junior=junior_instance, article=article_data).last():
|
||||||
JuniorArticle.objects.create(junior=junior_instance, article=article_data, status=str(NUMBER['two']))
|
JuniorArticle.objects.create(junior=junior_instance, article=article_data, status=str(NUMBER['two']),
|
||||||
|
current_card_page=NUMBER['zero'], current_que_page=NUMBER['zero'])
|
||||||
if article_data:
|
if article_data:
|
||||||
question_query = ArticleSurvey.objects.filter(article=article_id)
|
question_query = ArticleSurvey.objects.filter(article=article_id)
|
||||||
for question in question_query:
|
for question in question_query:
|
||||||
@ -534,6 +535,7 @@ class CheckAnswerAPIView(viewsets.ModelViewSet):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
answer_id = self.request.GET.get('answer_id')
|
answer_id = self.request.GET.get('answer_id')
|
||||||
|
current_page = self.request.GET.get('current_page')
|
||||||
queryset = self.get_queryset()
|
queryset = self.get_queryset()
|
||||||
submit_ans = SurveyOption.objects.filter(id=answer_id, is_answer=True).last()
|
submit_ans = SurveyOption.objects.filter(id=answer_id, is_answer=True).last()
|
||||||
junior_article_points = JuniorArticlePoints.objects.filter(junior__auth=self.request.user,
|
junior_article_points = JuniorArticlePoints.objects.filter(junior__auth=self.request.user,
|
||||||
@ -541,10 +543,13 @@ class CheckAnswerAPIView(viewsets.ModelViewSet):
|
|||||||
if submit_ans:
|
if submit_ans:
|
||||||
junior_article_points.update(submitted_answer=submit_ans, is_attempt=True, is_answer_correct=True)
|
junior_article_points.update(submitted_answer=submit_ans, is_attempt=True, is_answer_correct=True)
|
||||||
JuniorPoints.objects.filter(junior__auth=self.request.user).update(total_points=
|
JuniorPoints.objects.filter(junior__auth=self.request.user).update(total_points=
|
||||||
F('total_points')+ queryset.points)
|
F('total_points') + queryset.points)
|
||||||
else:
|
else:
|
||||||
junior_article_points.update(submitted_answer=submit_ans, is_attempt=True, earn_points=0,
|
junior_article_points.update(submitted_answer=submit_ans, is_attempt=True, earn_points=0,
|
||||||
is_answer_correct=False)
|
is_answer_correct=False)
|
||||||
|
JuniorArticle.objects.filter(junior__auth=self.request.user,
|
||||||
|
article=queryset.article).update(
|
||||||
|
current_que_page=int(current_page) + NUMBER['one'])
|
||||||
return custom_response(None, response_status=status.HTTP_200_OK)
|
return custom_response(None, response_status=status.HTTP_200_OK)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST)
|
return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST)
|
||||||
@ -588,9 +593,12 @@ class ReadArticleCardAPIView(views.APIView):
|
|||||||
junior_instance = Junior.objects.filter(auth=self.request.user).last()
|
junior_instance = Junior.objects.filter(auth=self.request.user).last()
|
||||||
article = self.request.data.get('article_id')
|
article = self.request.data.get('article_id')
|
||||||
article_card = self.request.data.get('article_card')
|
article_card = self.request.data.get('article_card')
|
||||||
|
current_page = self.request.data.get('current_page')
|
||||||
JuniorArticleCard.objects.filter(junior=junior_instance,
|
JuniorArticleCard.objects.filter(junior=junior_instance,
|
||||||
article__id=article,
|
article__id=article,
|
||||||
article_card__id=article_card).update(is_read=True)
|
article_card__id=article_card).update(is_read=True)
|
||||||
|
JuniorArticle.objects.filter(junior=junior_instance,
|
||||||
|
article__id=article).update(current_card_page=int(current_page)+NUMBER['one'])
|
||||||
return custom_response(SUCCESS_CODE['3043'], response_status=status.HTTP_200_OK)
|
return custom_response(SUCCESS_CODE['3043'], response_status=status.HTTP_200_OK)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST)
|
return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
@ -12,7 +12,7 @@ from base.messages import ERROR_CODE
|
|||||||
from guardian.utils import upload_image_to_alibaba
|
from guardian.utils import upload_image_to_alibaba
|
||||||
from web_admin.models import Article, ArticleCard, SurveyOption, ArticleSurvey, DefaultArticleCardImage
|
from web_admin.models import Article, ArticleCard, SurveyOption, ArticleSurvey, DefaultArticleCardImage
|
||||||
from web_admin.utils import pop_id, get_image_url
|
from web_admin.utils import pop_id, get_image_url
|
||||||
from junior.models import JuniorArticlePoints
|
from junior.models import JuniorArticlePoints, JuniorArticle
|
||||||
USER = get_user_model()
|
USER = get_user_model()
|
||||||
|
|
||||||
|
|
||||||
@ -268,12 +268,44 @@ class StartAssessmentSerializer(serializers.ModelSerializer):
|
|||||||
serializer for article API
|
serializer for article API
|
||||||
"""
|
"""
|
||||||
article_survey = ArticleQuestionSerializer(many=True)
|
article_survey = ArticleQuestionSerializer(many=True)
|
||||||
|
current_page = serializers.SerializerMethodField('get_current_page')
|
||||||
|
|
||||||
|
def get_current_page(self, obj):
|
||||||
|
"""current page"""
|
||||||
|
context_data = self.context.get('user')
|
||||||
|
data = JuniorArticle.objects.filter(junior__auth=context_data, article=obj).last()
|
||||||
|
if data:
|
||||||
|
return data.current_que_page
|
||||||
|
return NUMBER['zero']
|
||||||
class Meta:
|
class Meta:
|
||||||
"""
|
"""
|
||||||
meta class
|
meta class
|
||||||
"""
|
"""
|
||||||
model = Article
|
model = Article
|
||||||
fields = ('article_survey',)
|
fields = ('article_survey', 'current_page')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class ArticleCardlistSerializer(serializers.ModelSerializer):
|
||||||
|
"""
|
||||||
|
Article Card serializer
|
||||||
|
"""
|
||||||
|
id = serializers.IntegerField(required=False)
|
||||||
|
image_name = serializers.CharField(required=False)
|
||||||
|
image_url = serializers.CharField(required=False)
|
||||||
|
current_page = serializers.SerializerMethodField('get_current_page')
|
||||||
|
|
||||||
|
def get_current_page(self, obj):
|
||||||
|
"""current page"""
|
||||||
|
context_data = self.context.get('user')
|
||||||
|
data = JuniorArticle.objects.filter(junior__auth=context_data, article=obj.article).last()
|
||||||
|
if data:
|
||||||
|
return data.current_card_page
|
||||||
|
return NUMBER['zero']
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
"""
|
||||||
|
meta class
|
||||||
|
"""
|
||||||
|
model = ArticleCard
|
||||||
|
fields = ('id', 'title', 'description', 'image_name', 'image_url', 'current_page')
|
||||||
|
@ -16,8 +16,8 @@ from base.messages import SUCCESS_CODE, ERROR_CODE
|
|||||||
from web_admin.models import Article, ArticleCard, ArticleSurvey, DefaultArticleCardImage
|
from web_admin.models import Article, ArticleCard, ArticleSurvey, DefaultArticleCardImage
|
||||||
from web_admin.permission import AdminPermission
|
from web_admin.permission import AdminPermission
|
||||||
from web_admin.serializers.article_serializer import (ArticleSerializer, ArticleCardSerializer,
|
from web_admin.serializers.article_serializer import (ArticleSerializer, ArticleCardSerializer,
|
||||||
DefaultArticleCardImageSerializer, ArticleListSerializer
|
DefaultArticleCardImageSerializer, ArticleListSerializer,
|
||||||
)
|
ArticleCardlistSerializer)
|
||||||
|
|
||||||
USER = get_user_model()
|
USER = get_user_model()
|
||||||
|
|
||||||
@ -229,7 +229,7 @@ class ArticleListViewSet(GenericViewSet, mixins.ListModelMixin):
|
|||||||
|
|
||||||
class ArticleCardListViewSet(viewsets.ModelViewSet):
|
class ArticleCardListViewSet(viewsets.ModelViewSet):
|
||||||
"""Junior Points viewset"""
|
"""Junior Points viewset"""
|
||||||
serializer_class = ArticleCardSerializer
|
serializer_class = ArticleCardlistSerializer
|
||||||
permission_classes = [IsAuthenticated]
|
permission_classes = [IsAuthenticated]
|
||||||
http_method_names = ('get',)
|
http_method_names = ('get',)
|
||||||
|
|
||||||
@ -242,7 +242,7 @@ class ArticleCardListViewSet(viewsets.ModelViewSet):
|
|||||||
try:
|
try:
|
||||||
queryset = self.get_queryset()
|
queryset = self.get_queryset()
|
||||||
# article card list
|
# article card list
|
||||||
serializer = ArticleCardSerializer(queryset, many=True)
|
serializer = ArticleCardlistSerializer(queryset, context={"user": self.request.user}, many=True)
|
||||||
return custom_response(None, serializer.data, response_status=status.HTTP_200_OK)
|
return custom_response(None, serializer.data, response_status=status.HTTP_200_OK)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST)
|
return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
Reference in New Issue
Block a user