70 lines
2.7 KiB
Python
70 lines
2.7 KiB
Python
from rest_framework import permissions
|
|
from rest_framework.pagination import PageNumberPagination
|
|
from rest_framework.response import Response
|
|
from drf_yasg.utils import swagger_auto_schema
|
|
from drf_yasg import openapi
|
|
from chunyu_project.common_schemas import success_response
|
|
from adrf.viewsets import ModelViewSet
|
|
|
|
from .models import Changelog
|
|
from .serializers import ChangelogSerializer
|
|
|
|
|
|
class ChangelogPagination(PageNumberPagination):
|
|
page_size = 10
|
|
page_size_query_param = 'page_size'
|
|
max_page_size = 100
|
|
|
|
def get_paginated_response(self, data):
|
|
return Response({
|
|
'code': 10000,
|
|
'message': 'Success',
|
|
'data': {
|
|
'count': self.page.paginator.count,
|
|
'next': self.get_next_link(),
|
|
'previous': self.get_previous_link(),
|
|
'results': data,
|
|
}
|
|
})
|
|
|
|
|
|
class ChangelogViewSet(ModelViewSet):
|
|
"""更新日志 ViewSet"""
|
|
queryset = Changelog.objects.filter(is_published=True)
|
|
serializer_class = ChangelogSerializer
|
|
permission_classes = [permissions.AllowAny]
|
|
pagination_class = ChangelogPagination
|
|
http_method_names = ['get']
|
|
|
|
def get_queryset(self):
|
|
queryset = Changelog.objects.filter(is_published=True)
|
|
update_type = self.request.query_params.get('update_type')
|
|
if update_type:
|
|
queryset = queryset.filter(update_type=update_type)
|
|
return queryset.order_by('-published_at')
|
|
|
|
@swagger_auto_schema(
|
|
tags=['更新日志'],
|
|
operation_summary='获取更新日志列表',
|
|
operation_description='获取已发布的更新日志列表,支持分页和按类型筛选',
|
|
manual_parameters=[
|
|
openapi.Parameter('update_type', openapi.IN_QUERY, description='更新类型筛选: new_feature/improvement/bug_fix/other', type=openapi.TYPE_STRING),
|
|
openapi.Parameter('page', openapi.IN_QUERY, description='页码', type=openapi.TYPE_INTEGER),
|
|
openapi.Parameter('page_size', openapi.IN_QUERY, description='每页数量', type=openapi.TYPE_INTEGER),
|
|
],
|
|
responses={200: success_response}
|
|
)
|
|
async def list(self, request, *args, **kwargs):
|
|
return await super().list(request, *args, **kwargs)
|
|
|
|
@swagger_auto_schema(
|
|
tags=['更新日志'],
|
|
operation_summary='获取更新日志详情',
|
|
operation_description='获取指定更新日志的详细信息',
|
|
manual_parameters=[
|
|
openapi.Parameter('pk', openapi.IN_PATH, description='更新日志ID', type=openapi.TYPE_INTEGER, required=True),
|
|
],
|
|
responses={200: success_response}
|
|
)
|
|
async def retrieve(self, request, *args, **kwargs):
|
|
return await super().retrieve(request, *args, **kwargs) |