Files
zod-backend/web_admin/views.py
2023-07-20 18:01:53 +05:30

152 lines
5.6 KiB
Python

"""
web_admin views file
"""
# django imports
from rest_framework.viewsets import GenericViewSet, mixins
from rest_framework.response import Response
from rest_framework import status
from rest_framework.decorators import action
from rest_framework.permissions import IsAuthenticated
# local imports
from account.utils import custom_response, custom_error_response
from base.messages import SUCCESS_CODE, ERROR_CODE
from web_admin.models import Article, ArticleCard, ArticleSurvey
from web_admin.permission import AdminPermission
from web_admin.serializers import ArticleSerializer, ArticleCardSerializer
class ArticleViewSet(GenericViewSet, mixins.CreateModelMixin, mixins.UpdateModelMixin,
mixins.ListModelMixin, mixins.RetrieveModelMixin, mixins.DestroyModelMixin):
"""
article api
"""
serializer_class = ArticleSerializer
# permission_classes = [IsAuthenticated, AdminPermission]
queryset = Article.objects.prefetch_related('article_cards',
'article_survey',
'article_survey__survey_options').order_by('-created_at')
http_method_names = ['get', 'post', 'put', 'delete']
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.queryset.filter(id=kwargs['pk']).first()
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.queryset.filter(is_deleted=False)
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.queryset.filter(id=kwargs['pk'], is_deleted=False)
serializer = self.serializer_class(queryset, many=True)
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.queryset.filter(id=kwargs['pk']).update(is_deleted=True)
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='', url_path='', detail=False)
def search_article(self, request):
"""
article search api method
:param request:
:return: searched article
"""
search = request.GET.get('search')
queryset = self.queryset.filter(title__icontains=search)
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)
@action(methods=['get'], url_name='remove_card', url_path='remove_card',
detail=True, serializer_class=None)
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, serializer_class=None)
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)
def add_card(self, request):
print(request.data)
serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return custom_response(SUCCESS_CODE["3000"])