From 4efc7a2d5968673a6c1d8f3c796cfd9536b9fff6 Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Tue, 2 Sep 2025 17:40:03 +0500 Subject: [PATCH] add: add banner api for admin panel --- core/apps/admin_panel/serializers/banner.py | 12 ++++ core/apps/admin_panel/urls.py | 11 ++++ core/apps/admin_panel/views/banner.py | 73 +++++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 core/apps/admin_panel/serializers/banner.py create mode 100644 core/apps/admin_panel/views/banner.py diff --git a/core/apps/admin_panel/serializers/banner.py b/core/apps/admin_panel/serializers/banner.py new file mode 100644 index 0000000..e2aaf5f --- /dev/null +++ b/core/apps/admin_panel/serializers/banner.py @@ -0,0 +1,12 @@ +from rest_framework import serializers + +from core.apps.shared.models import Banner + + +class BannerSerializer(serializers.ModelSerializer): + class Meta: + model = Banner + fields = [ + 'id', 'banner' + ] + \ No newline at end of file diff --git a/core/apps/admin_panel/urls.py b/core/apps/admin_panel/urls.py index a9366fd..c8fd316 100644 --- a/core/apps/admin_panel/urls.py +++ b/core/apps/admin_panel/urls.py @@ -1,6 +1,8 @@ from django.urls import path, include from core.apps.admin_panel.views import user as user_views +from core.apps.admin_panel.views import banner as banner_views + urlpatterns = [ path('user/', include( @@ -11,5 +13,14 @@ urlpatterns = [ path('/delete/', user_views.UserDeleteApiView.as_view()), path('/', user_views.UserDetailApiView.as_view()), ] + )), + path('banner/', include( + [ + path('create/', banner_views.BannerCreateApiView.as_view()), + path('list/', banner_views.BannerListApiView.as_view()), + path('/', banner_views.BannerDetailApiView.as_view()), + path('/update/', banner_views.BannerUpdateApiView.as_view()), + path('/delete/', banner_views.BannerDeleteApiView.as_view()), + ] )) ] \ No newline at end of file diff --git a/core/apps/admin_panel/views/banner.py b/core/apps/admin_panel/views/banner.py new file mode 100644 index 0000000..37090b9 --- /dev/null +++ b/core/apps/admin_panel/views/banner.py @@ -0,0 +1,73 @@ +from django.shortcuts import get_object_or_404 + +from rest_framework import generics, permissions, status, parsers + +from core.apps.shared.models import Banner +from core.apps.shared.mixins.response import ResponseMixin +from core.apps.admin_panel.serializers.banner import BannerSerializer + + +class BannerCreateApiView(generics.GenericAPIView, ResponseMixin): + serializer_class = BannerSerializer + queryset = Banner.objects.all() + permission_classes = [permissions.IsAdminUser] + parser_classes = [parsers.MultiPartParser, parsers.FormParser] + + def post(self, request): + serializer = self.serializer_class(data=request.data) + if serializer.is_valid(raise_exception=True): + serializer.save() + return self.success_response(message='banner qoshildi', status_code=status.HTTP_201_CREATED) + return self.failure_response(data=serializer.errors, message='banner qoshishda hatolik') + + +class BannerUpdateApiView(generics.GenericAPIView, ResponseMixin): + serializer_class = BannerSerializer + queryset = Banner.objects.all() + permission_classes = [permissions.IsAdminUser] + parser_classes = [parsers.MultiPartParser, parsers.FormParser] + + def patch(self, request, id): + banner = get_object_or_404(Banner, id=id) + serializer = self.serializer_class(data=request.data, instance=banner) + if serializer.is_valid(raise_exception=True): + serializer.save() + return self.success_response(message='banner tahrirlandi') + return self.failure_response(message='banner tahrirlashda hatolik', data=serializer.errors) + + +class BannerDeleteApiView(generics.GenericAPIView, ResponseMixin): + serializer_class = BannerSerializer + queryset = Banner.objects.all() + permission_classes = [permissions.IsAdminUser] + + def delete(self, request, id): + banner = get_object_or_404(Banner, id=id) + banner.delete() + return self.success_response(message='banner ochirildi', status_code=status.HTTP_204_NO_CONTENT) + + +class BannerDetailApiView(generics.GenericAPIView, ResponseMixin): + serializer_class = BannerSerializer + queryset = Banner.objects.all() + permission_classes = [permissions.IsAdminUser] + + def get(self, request, id): + banner = get_object_or_404(Banner, id=id) + serializer = self.serializer_class(banner) + return self.success_response(message='banner malumotlari', data=serializer.data) + + +class BannerListApiView(generics.GenericAPIView, ResponseMixin): + serializer_class = BannerSerializer + queryset = Banner.objects.all() + permission_classes = [permissions.IsAdminUser] + + def get(self, request): + banners = self.queryset + page = self.paginate_queryset(banners) + if page is not None: + serializer = self.serializer_class(page, many=True) + return self.get_paginated_response(serializer.data) + +