Files
goodtimes/manage_cms/api/views.py
rizwanisready db213d3228 wrong commit
2024-02-29 13:25:50 +05:30

159 lines
5.3 KiB
Python

from django.db import transaction
from django.utils import timezone
from rest_framework import status, generics
from rest_framework.views import APIView
from rest_framework_simplejwt.tokens import RefreshToken
from . import serializers
from accounts.models import IAmPrincipal
from goodtimes import constants
from goodtimes.services import SMSError, SMSService
from manage_cms import models
from taggit.models import Tag
from taggit.models import TaggedItem
from django.contrib.contenttypes.models import ContentType
# from nifty11_project.services import SMSError, SMSService
from goodtimes.utils import ApiResponse
from goodtimes import date_utils
from rest_framework.permissions import AllowAny, IsAuthenticated
from rest_framework_simplejwt.authentication import JWTAuthentication
class NewsAndArticlesView(APIView):
authentication_classes = [JWTAuthentication]
permission_classes = [IsAuthenticated]
def get(self, request):
queryset = models.NewsAndArticles.objects.filter(active=True)
serializer = serializers.NewsAndArticlesSerializer(queryset, many=True)
success_response = {
"status": status.HTTP_200_OK,
"message": constants.SUCCESS,
"data": serializer.data,
}
return ApiResponse.success(**success_response)
class NewsLettersView(APIView):
authentication_classes = []
permission_classes = []
def get(self, request):
queryset = models.Newsletter.objects.filter(active=True, is_published=True)
serializer = serializers.NewsLetterSerializer(queryset, many=True)
return ApiResponse.success(
{"data": serializer.data, "message": constants.SUCCESS}
)
class FaqView(APIView):
authentication_classes = []
permission_classes = []
def get(self, request):
queryset = models.Faqs.objects.filter(active=True)
serializer = serializers.FaqSerializer(queryset, many=True)
success_response = {
"status": status.HTTP_200_OK,
"message": constants.SUCCESS,
"data": serializer.data,
}
return ApiResponse.success(**success_response)
class OrganizationView(APIView):
# queryset = models.Organization.objects.latest('id')
model = models.Organization
serializer_class = serializers.OrganizationSerializer
authentication_classes = []
permission_classes = []
def get(self, request):
queryset = self.model.objects.filter(active=True).last()
serializer = self.serializer_class(queryset)
success_response = {
"status": status.HTTP_200_OK,
"message": constants.SUCCESS,
"data": serializer.data,
}
return ApiResponse.success(**success_response)
class EducationVideoView(APIView):
model = models.Education
serializer_class = serializers.EducationVideoSerializer
authentication_classes = []
permission_classes = []
def get(self, request):
queryset = self.model.objects.prefetch_related("tags").filter(
content_type=self.model.VIDEO,
active=True,
published_at__lte=date_utils.get_current_date().isoformat(),
withdrawn_at__gte=date_utils.get_current_date().isoformat(),
)
serializer = self.serializer_class(
queryset, many=True, context={"request": request}
)
success_response = {
"status": status.HTTP_200_OK,
"message": constants.SUCCESS,
"data": serializer.data,
}
return ApiResponse.success(**success_response)
class EducationMaterialView(APIView):
model = models.Education
serializer_class = serializers.EducationMaterialSerializer
authentication_classes = []
permission_classes = []
def get(self, request):
queryset = self.model.objects.prefetch_related("tags").filter(
content_type=self.model.MATERIAL,
active=True,
published_at__lte=date_utils.get_current_date().isoformat(),
withdrawn_at__gte=date_utils.get_current_date().isoformat(),
)
serializer = self.serializer_class(
queryset, many=True, context={"request": request}
)
success_response = {
"status": status.HTTP_200_OK,
"message": constants.SUCCESS,
"data": serializer.data,
}
return ApiResponse.success(**success_response)
class EducationTagsView(APIView):
model = models.Education
serializer_class = serializers.TagSerializer
authentication_classes = []
permission_classes = []
def get(self, request):
# Get ContentType for the Education model
education_content_type = ContentType.objects.get_for_model(self.model)
# Fetch tags associated with Education instances
education_tags = (
TaggedItem.objects.filter(content_type=education_content_type)
.values_list("tag", flat=True)
)
# Retrieve actual tag objects from Tag model using the tag IDs obtained
queryset = Tag.objects.filter(id__in=education_tags)
serializer = self.serializer_class(queryset, many=True)
success_response = {
"status": status.HTTP_200_OK,
"message": constants.SUCCESS,
"data": serializer.data,
}
return ApiResponse.success(**success_response)