60 lines
2.2 KiB
Python
60 lines
2.2 KiB
Python
import os
|
|
import shutil
|
|
#######################Django related imports####################
|
|
from rest_framework import generics, status
|
|
from rest_framework.views import APIView
|
|
from rest_framework.response import Response
|
|
from django.conf import settings
|
|
#################################################################
|
|
#API related imports
|
|
from .models import (
|
|
Category,
|
|
Blog
|
|
)
|
|
from .serializers import (
|
|
CategorySerializer,
|
|
UnifiedCategoryBlogSerializer,
|
|
)
|
|
################################################################
|
|
|
|
class CategoryCreateAPIView(generics.CreateAPIView):
|
|
queryset = Category.objects.all()
|
|
serializer_class = CategorySerializer
|
|
|
|
class CategoryUpdateAPIView(generics.RetrieveUpdateAPIView):
|
|
queryset = Category.objects.all()
|
|
serializer_class = CategorySerializer
|
|
lookup_field = 'category_id'
|
|
|
|
class CategoryListAPIView(generics.ListAPIView):
|
|
queryset = Category.objects.all()
|
|
serializer_class = CategorySerializer
|
|
|
|
class CategoryDeleteAPIView(generics.DestroyAPIView):
|
|
queryset = Category.objects.all()
|
|
serializer_class = CategorySerializer
|
|
lookup_field = 'category_id'
|
|
|
|
def delete(self, request, *args, **kwargs):
|
|
instance = self.get_object()
|
|
media_folder = os.path.join(settings.MEDIA_ROOT, 'data', 'category', str(instance.category_id))
|
|
|
|
if os.path.exists(media_folder):
|
|
shutil.rmtree(media_folder)
|
|
if hasattr(instance, 'blogs'): # Ensuring the related_name is 'blogs'
|
|
for blog in instance.blogs.all():
|
|
blog_media_folder = os.path.join(settings.MEDIA_ROOT, 'data', 'blog', str(blog.blog_id))
|
|
if os.path.exists(blog_media_folder):
|
|
shutil.rmtree(blog_media_folder)
|
|
|
|
return super().delete(request, *args, **kwargs)
|
|
|
|
class BlogsByCategoryAPIView(APIView):
|
|
def get(self, request, category_id):
|
|
try:
|
|
category = Category.objects.get(category_id=category_id)
|
|
except Category.DoesNotExist:
|
|
return Response({'message': 'Category not found'}, status=404)
|
|
|
|
serializer = UnifiedCategoryBlogSerializer(category)
|
|
return Response(serializer.data) |