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)