mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-07-15 10:05:21 +00:00
sonar issues
This commit is contained in:
@ -7,13 +7,13 @@ from rest_framework.viewsets import GenericViewSet
|
||||
from rest_framework.decorators import action
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.db.models import Q
|
||||
from django.db.models import Count, OuterRef, Subquery, Sum
|
||||
from django.db.models import Count
|
||||
from django.db.models.functions import TruncDate
|
||||
from django.db.models import F, Window
|
||||
from django.db.models.functions.window import Rank
|
||||
|
||||
from account.utils import custom_response
|
||||
from base.constants import PENDING, IN_PROGRESS, REJECTED, REQUESTED, COMPLETED, EXPIRED
|
||||
from base.constants import PENDING, IN_PROGRESS, REJECTED, REQUESTED, COMPLETED, EXPIRED, DATE_FORMAT
|
||||
from guardian.models import JuniorTask
|
||||
from junior.models import JuniorPoints
|
||||
from web_admin.serializers.analytics_serializer import LeaderboardSerializer
|
||||
@ -24,6 +24,10 @@ USER = get_user_model()
|
||||
class AnalyticsViewSet(GenericViewSet):
|
||||
"""
|
||||
analytics api view
|
||||
to get user report (active users, guardians and juniors counts)
|
||||
to get new user sign up report
|
||||
to get task report (completed, in-progress, requested and rejected tasks count)
|
||||
to get junior leaderboard and ranking
|
||||
"""
|
||||
serializer_class = None
|
||||
|
||||
@ -41,7 +45,8 @@ class AnalyticsViewSet(GenericViewSet):
|
||||
def total_users_count(self, request, *args, **kwargs):
|
||||
"""
|
||||
api method to get total users, guardians and juniors
|
||||
:param request: query params {start_date and end_date}, date format (yyyy-mm-dd)
|
||||
:param request: start_date: date format (yyyy-mm-dd)
|
||||
:param request: end_date: date format (yyyy-mm-dd)
|
||||
:return:
|
||||
"""
|
||||
|
||||
@ -49,8 +54,8 @@ class AnalyticsViewSet(GenericViewSet):
|
||||
start_date = end_date - datetime.timedelta(days=6)
|
||||
|
||||
if request.query_params.get('start_date') and request.query_params.get('end_date'):
|
||||
start_date = datetime.datetime.strptime(request.query_params.get('start_date'), '%Y-%m-%d')
|
||||
end_date = datetime.datetime.strptime(request.query_params.get('end_date'), '%Y-%m-%d')
|
||||
start_date = datetime.datetime.strptime(request.query_params.get('start_date'), DATE_FORMAT)
|
||||
end_date = datetime.datetime.strptime(request.query_params.get('end_date'), DATE_FORMAT)
|
||||
|
||||
user_qs = self.get_queryset()
|
||||
queryset = user_qs.filter(date_joined__range=(start_date, (end_date + datetime.timedelta(days=1))))
|
||||
@ -65,15 +70,16 @@ class AnalyticsViewSet(GenericViewSet):
|
||||
def new_signups(self, request, *args, **kwargs):
|
||||
"""
|
||||
api method to get new signups
|
||||
:param request: query params {start_date and end_date}, date format (yyyy-mm-dd)
|
||||
:param request: start_date: date format (yyyy-mm-dd)
|
||||
:param request: end_date: date format (yyyy-mm-dd)
|
||||
:return:
|
||||
"""
|
||||
end_date = datetime.date.today()
|
||||
start_date = end_date - datetime.timedelta(days=6)
|
||||
|
||||
if request.query_params.get('start_date') and request.query_params.get('end_date'):
|
||||
start_date = datetime.datetime.strptime(request.query_params.get('start_date'), '%Y-%m-%d')
|
||||
end_date = datetime.datetime.strptime(request.query_params.get('end_date'), '%Y-%m-%d')
|
||||
start_date = datetime.datetime.strptime(request.query_params.get('start_date'), DATE_FORMAT)
|
||||
end_date = datetime.datetime.strptime(request.query_params.get('end_date'), DATE_FORMAT)
|
||||
|
||||
user_qs = self.get_queryset()
|
||||
signup_data = user_qs.filter(date_joined__range=[start_date, (end_date + datetime.timedelta(days=1))]
|
||||
@ -85,16 +91,17 @@ class AnalyticsViewSet(GenericViewSet):
|
||||
@action(methods=['get'], url_name='assign-tasks', url_path='assign-tasks', detail=False)
|
||||
def assign_tasks_report(self, request, *args, **kwargs):
|
||||
"""
|
||||
api method to get assign tasks
|
||||
:param request: query params {start_date and end_date}, date format (yyyy-mm-dd)
|
||||
api method to get assign tasks count for (completed, in-progress, requested and rejected) task
|
||||
:param request: start_date: date format (yyyy-mm-dd)
|
||||
:param request: end_date: date format (yyyy-mm-dd)
|
||||
:return:
|
||||
"""
|
||||
end_date = datetime.date.today()
|
||||
start_date = end_date - datetime.timedelta(days=6)
|
||||
|
||||
if request.query_params.get('start_date') and request.query_params.get('end_date'):
|
||||
start_date = datetime.datetime.strptime(request.query_params.get('start_date'), '%Y-%m-%d')
|
||||
end_date = datetime.datetime.strptime(request.query_params.get('end_date'), '%Y-%m-%d')
|
||||
start_date = datetime.datetime.strptime(request.query_params.get('start_date'), DATE_FORMAT)
|
||||
end_date = datetime.datetime.strptime(request.query_params.get('end_date'), DATE_FORMAT)
|
||||
|
||||
assign_tasks = JuniorTask.objects.filter(
|
||||
created_at__range=[start_date, (end_date + datetime.timedelta(days=1))]
|
||||
@ -113,11 +120,10 @@ class AnalyticsViewSet(GenericViewSet):
|
||||
serializer_class=LeaderboardSerializer)
|
||||
def junior_leaderboard(self, request):
|
||||
"""
|
||||
|
||||
to get junior leaderboard and rank
|
||||
:param request:
|
||||
:return:
|
||||
"""
|
||||
# queryset = JuniorPoints.objects.all().order_by('-total_points', 'junior__created_at')
|
||||
queryset = JuniorPoints.objects.prefetch_related('junior', 'junior__auth').annotate(rank=Window(
|
||||
expression=Rank(),
|
||||
order_by=[F('total_points').desc(), 'junior__created_at']
|
||||
|
Reference in New Issue
Block a user