from rest_framework import generics, response, status from core.exceptions import BreakException class ApiResponse: def response( self, success=True, message="", data=None, status_code=status.HTTP_200_OK, **kwargs ): if data is None: data = {} response_data = { "success": success, "message": message, "data": data, **kwargs, } return response.Response(data=response_data, status=status_code) def success( self, message="", data=None, status_code=status.HTTP_200_OK, **kwargs ): return self.response(True, message, data, status_code, **kwargs) def error( self, message="", data=None, error_code=0, status_code=status.HTTP_400_BAD_REQUEST, exception=None, **kwargs ): if isinstance(exception, BreakException): raise exception return self.response( False, message, data, status_code, error_code=error_code, **kwargs ) # noqa class ListApiView(generics.ListAPIView, ApiResponse): def list(self, request, *args, **kwargs): queryset = self.filter_queryset(self.get_queryset()) page = self.paginate_queryset(queryset) if page is not None: serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) serializer = self.get_serializer(queryset, many=True) return self.success(data=serializer.data) class CreateApiView(generics.CreateAPIView, ApiResponse): def create(self, request, *args, **kwargs): super().create(request, *args, **kwargs) return self.success( self.message if hasattr(self, "message") else "Muvaffaqiyatli yaratildi" ) # noqa