mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-07-15 10:05:21 +00:00
225 lines
8.0 KiB
Python
225 lines
8.0 KiB
Python
"""
|
|
web_admin views file
|
|
"""
|
|
# django imports
|
|
from rest_framework.viewsets import GenericViewSet, mixins
|
|
from rest_framework.filters import OrderingFilter, SearchFilter
|
|
from rest_framework import status
|
|
from rest_framework.decorators import action
|
|
from rest_framework.permissions import IsAuthenticated, AllowAny
|
|
from django.contrib.auth import get_user_model
|
|
|
|
# local imports
|
|
from account.utils import custom_response, custom_error_response
|
|
from base.constants import USER_TYPE
|
|
from base.messages import SUCCESS_CODE, ERROR_CODE
|
|
from web_admin.models import Article, ArticleCard, ArticleSurvey, DefaultArticleCardImage
|
|
from web_admin.permission import AdminPermission
|
|
from web_admin.serializers.article_serializer import (ArticleSerializer, ArticleCardSerializer,
|
|
DefaultArticleCardImageSerializer,
|
|
UserManagementListSerializer)
|
|
|
|
USER = get_user_model()
|
|
|
|
|
|
class ArticleViewSet(GenericViewSet, mixins.CreateModelMixin, mixins.UpdateModelMixin,
|
|
mixins.ListModelMixin, mixins.RetrieveModelMixin, mixins.DestroyModelMixin):
|
|
"""
|
|
article api
|
|
"""
|
|
serializer_class = ArticleSerializer
|
|
permission_classes = [IsAuthenticated, AdminPermission]
|
|
queryset = Article
|
|
filter_backends = (OrderingFilter, SearchFilter,)
|
|
search_fields = ['title']
|
|
http_method_names = ['get', 'post', 'put', 'delete']
|
|
|
|
def get_queryset(self):
|
|
article = self.queryset.objects.filter(is_deleted=False).prefetch_related(
|
|
'article_cards', 'article_survey', 'article_survey__survey_options'
|
|
).order_by('-created_at')
|
|
queryset = self.filter_queryset(article)
|
|
return queryset
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
"""
|
|
article create api method
|
|
:param request:
|
|
:param args:
|
|
:param kwargs:
|
|
:return: success message
|
|
"""
|
|
serializer = self.serializer_class(data=request.data)
|
|
serializer.is_valid(raise_exception=True)
|
|
serializer.save()
|
|
return custom_response(SUCCESS_CODE["3027"])
|
|
|
|
def update(self, request, *args, **kwargs):
|
|
"""
|
|
article update api method
|
|
:param request:
|
|
:param args:
|
|
:param kwargs:
|
|
:return: success message
|
|
"""
|
|
article = self.get_object()
|
|
serializer = self.serializer_class(article, data=request.data)
|
|
serializer.is_valid(raise_exception=True)
|
|
serializer.save()
|
|
return custom_response(SUCCESS_CODE["3028"])
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
"""
|
|
article list api method
|
|
:param request:
|
|
:param args:
|
|
:param kwargs:
|
|
:return: list of article
|
|
"""
|
|
queryset = self.get_queryset()
|
|
paginator = self.pagination_class()
|
|
paginated_queryset = paginator.paginate_queryset(queryset, request)
|
|
serializer = self.serializer_class(paginated_queryset, many=True)
|
|
return custom_response(None, data=serializer.data)
|
|
|
|
def retrieve(self, request, *args, **kwargs):
|
|
"""
|
|
article detail api method
|
|
:param request:
|
|
:param args:
|
|
:param kwargs:
|
|
:return: article detail data
|
|
"""
|
|
queryset = self.get_object()
|
|
serializer = self.serializer_class(queryset, many=False)
|
|
return custom_response(None, data=serializer.data)
|
|
|
|
def destroy(self, request, *args, **kwargs):
|
|
"""
|
|
article delete (soft delete) api method
|
|
:param request:
|
|
:param args:
|
|
:param kwargs:
|
|
:return: success message
|
|
"""
|
|
article = self.get_object()
|
|
article.is_deleted = True
|
|
article.save()
|
|
if article:
|
|
return custom_response(SUCCESS_CODE["3029"])
|
|
return custom_error_response(ERROR_CODE["2041"], status.HTTP_400_BAD_REQUEST)
|
|
|
|
@action(methods=['get'], url_name='remove_card', url_path='remove_card',
|
|
detail=True)
|
|
def remove_article_card(self, request, *args, **kwargs):
|
|
"""
|
|
article card remove (delete) api method
|
|
:param request:
|
|
:param args:
|
|
:param kwargs:
|
|
:return: success message
|
|
"""
|
|
try:
|
|
ArticleCard.objects.filter(id=kwargs['pk']).first().delete()
|
|
return custom_response(SUCCESS_CODE["3030"])
|
|
except AttributeError:
|
|
return custom_error_response(ERROR_CODE["2042"], response_status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
@action(methods=['get'], url_name='remove_survey', url_path='remove_survey',
|
|
detail=True)
|
|
def remove_article_survey(self, request, *args, **kwargs):
|
|
"""
|
|
article survey remove (delete) api method
|
|
:param request:
|
|
:param args:
|
|
:param kwargs:
|
|
:return: success message
|
|
"""
|
|
try:
|
|
ArticleSurvey.objects.filter(id=kwargs['pk']).first().delete()
|
|
return custom_response(SUCCESS_CODE["3031"])
|
|
except AttributeError:
|
|
return custom_error_response(ERROR_CODE["2043"], response_status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
@action(methods=['post'], url_name='test-add-card', url_path='test-add-card',
|
|
detail=False, serializer_class=ArticleCardSerializer, permission_classes=[AllowAny])
|
|
def add_card(self, request):
|
|
"""
|
|
:param request:
|
|
:return:
|
|
"""
|
|
serializer = self.serializer_class(data=request.data)
|
|
serializer.is_valid(raise_exception=True)
|
|
serializer.save()
|
|
return custom_response(SUCCESS_CODE["3000"])
|
|
|
|
@action(methods=['get'], url_name='test-list-card', url_path='test-list-card',
|
|
detail=False, serializer_class=ArticleCardSerializer, permission_classes=[AllowAny])
|
|
def list_card(self, request):
|
|
"""
|
|
:param request:
|
|
:return:
|
|
"""
|
|
queryset = ArticleCard.objects.all()
|
|
serializer = self.serializer_class(queryset, many=True)
|
|
return custom_response(None, serializer.data)
|
|
|
|
|
|
class DefaultArticleCardImagesViewSet(GenericViewSet, mixins.CreateModelMixin, mixins.ListModelMixin):
|
|
"""
|
|
api to upload and list default article card images
|
|
"""
|
|
serializer_class = DefaultArticleCardImageSerializer
|
|
permission_classes = [IsAuthenticated, AdminPermission]
|
|
queryset = DefaultArticleCardImage.objects.all()
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
"""
|
|
api method to upload default article card images
|
|
:param request:
|
|
:return: success message
|
|
"""
|
|
serializer = self.serializer_class(data=request.data)
|
|
serializer.is_valid(raise_exception=True)
|
|
serializer.save()
|
|
return custom_response(SUCCESS_CODE["3000"])
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
"""
|
|
api method to list default article card images
|
|
:param request:
|
|
:return: default article card images
|
|
"""
|
|
queryset = self.queryset
|
|
serializer = self.serializer_class(queryset, many=True)
|
|
return custom_response(None, data=serializer.data)
|
|
|
|
|
|
class UserManagementViewSet(GenericViewSet, mixins.ListModelMixin):
|
|
"""
|
|
api to manage (list, view, edit) user
|
|
"""
|
|
serializer_class = UserManagementListSerializer
|
|
permission_classes = []
|
|
queryset = USER.objects.prefetch_related(
|
|
'guardian_profile', 'junior_profile')
|
|
|
|
def get_queryset(self):
|
|
if self.request.query_params.get('user_type') == dict(USER_TYPE).get('2'):
|
|
return self.queryset.filter(junior_profile__isnull=True)
|
|
elif self.request.query_params.get('user_type') == dict(USER_TYPE).get('1'):
|
|
return self.queryset.filter(guardian_profile__isnull=True)
|
|
else:
|
|
return self.queryset
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
"""
|
|
api method to list all the user
|
|
:param request:
|
|
:return:
|
|
"""
|
|
queryset = self.get_queryset()
|
|
serializer = self.serializer_class(queryset, many=True)
|
|
return custom_response(None, data=serializer.data)
|
|
|