from rest_framework import viewsets, permissions from django.core.paginator import Paginator from .serializers import ( ArticleSerializer, ArticleListSerializer, IncomeSerializer, AdvertisementSerializer, CategorySerializer, ArticleBlockSerializer ) from .services import ( ArticleService, IncomeService, AdvertisementService, CategoryService, ArticleBlockService ) from .response import R from django.shortcuts import get_object_or_404
class ArticleViewSet(viewsets.ViewSet): permission_classes = [permissions.AllowAny]
def list(self, request): queryset = ArticleService.get_filtered_articles(request.query_params) page = int(request.GET.get('page', 1)) size = int(request.GET.get('page_size', 10)) paginator = Paginator(queryset, size) page_obj = paginator.get_page(page)
serializer = ArticleListSerializer(page_obj, many=True) data = R.paginate(page_obj) data['results'] = serializer.data return R.success(data)
def retrieve(self, request, pk=None): article = get_object_or_404(Article, pk=pk) serializer = ArticleSerializer(article) return R.success(serializer.data)
class IncomeViewSet(viewsets.ViewSet): permission_classes = [permissions.IsAuthenticated]
def list(self, request): queryset = IncomeService.get_user_incomes(request.user, request.GET.get('income_type')) serializer = IncomeSerializer(queryset, many=True) return R.success(serializer.data)
class AdvertisementViewSet(viewsets.ViewSet): permission_classes = [permissions.AllowAny]
def list(self, request): queryset = AdvertisementService.list_ads() serializer = AdvertisementSerializer(queryset, many=True) return R.success(serializer.data)
class CategoryViewSet(viewsets.ViewSet): permission_classes = [permissions.AllowAny]
def list(self, request): queryset = CategoryService.list_categories() serializer = CategorySerializer(queryset, many=True) return R.success(serializer.data)
class ArticleBlockViewSet(viewsets.ViewSet): permission_classes = [permissions.AllowAny]
def list(self, request): queryset = ArticleBlockService.list_blocks(request.GET.get('article')) serializer = ArticleBlockSerializer(queryset, many=True) return R.success(serializer.data)
|