From 372a0273ea4267779508b9338f421ecef291d1da Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Wed, 17 Sep 2025 14:47:57 +0500 Subject: [PATCH] add: add three new apis for delete --- core/apps/orders/urls.py | 3 +++ core/apps/orders/views/offer.py | 14 +++++++++++++- core/apps/orders/views/order.py | 14 +++++++++++++- core/apps/orders/views/party.py | 14 +++++++++++++- 4 files changed, 42 insertions(+), 3 deletions(-) diff --git a/core/apps/orders/urls.py b/core/apps/orders/urls.py index 8712735..0189683 100644 --- a/core/apps/orders/urls.py +++ b/core/apps/orders/urls.py @@ -15,6 +15,7 @@ urlpatterns = [ path("/accept/", order_views.OrderChangeStatusAcceptedApiView.as_view()), path("accepted/list/", order_views.OrderAcceptApiView.as_view()), path('/offers/', order_views.OrderOfferListApiView.as_view()), + path('bulk-delete/', order_views.DeleteMultipleOrderApiView.as_view()), ] )), path('offer/', include( @@ -23,6 +24,7 @@ urlpatterns = [ path('list/', offer_views.OfferListApiView.as_view()), path('/delete/', offer_views.OfferDeleteApiView.as_view()), path('/update/', offer_views.OfferUpdateApiView.as_view()), + path('bulk-delete/', offer_views.DeleteMultipleOfferApiView.as_view()), ] )), path('party/', include( @@ -39,6 +41,7 @@ urlpatterns = [ path('/is_made/', party_views.PartyChangeStatusToIsMadeApiView.as_view()), path('pay/', party_views.PartyPaymentApiView.as_view()), path('statistics/', party_views.PartyStatisticsApiView.as_view()), + path('bulk-delete/', party_views.DeleteMultiplePartyApiView.as_view()), ] )), ] \ No newline at end of file diff --git a/core/apps/orders/views/offer.py b/core/apps/orders/views/offer.py index 5fb258f..daaa5a8 100644 --- a/core/apps/orders/views/offer.py +++ b/core/apps/orders/views/offer.py @@ -88,4 +88,16 @@ class OfferDeleteApiView(views.APIView): def delete(self, request, id): offer = get_object_or_404(Offer, id=id) offer.delete() - return Response({'success': True}, status=204) \ No newline at end of file + return Response({'success': True}, status=204) + + +class DeleteMultipleOfferApiView(views.APIView): + permission_classes = [HasRolePermission] + + def delete(self, request): + ids = request.data.get("offer_ids", []) + if not ids: + return Response({"detail": "offer_ids kerak"}, status=400) + + deleted_count, _ = Offer.objects.filter(id__in=ids).delete() + return Response({"deleted": deleted_count}, status=200) \ No newline at end of file diff --git a/core/apps/orders/views/order.py b/core/apps/orders/views/order.py index ec8c3c6..d0f05f0 100644 --- a/core/apps/orders/views/order.py +++ b/core/apps/orders/views/order.py @@ -99,4 +99,16 @@ class OrderOfferListApiView(generics.GenericAPIView): def get(self, request, order_id): offers = self.get_queryset().select_related("order").filter(order_id=order_id) serializer = self.serializer_class(offers, many=True) - return Response(serializer.data, status=200) \ No newline at end of file + return Response(serializer.data, status=200) + + +class DeleteMultipleOrderApiView(views.APIView): + permission_classes = [HasRolePermission] + + def delete(self, request): + ids = request.data.get("order_ids", []) + if not ids: + return Response({"detail": "order_ids kerak"}, status=status.HTTP_400_BAD_REQUEST) + + deleted_count, _ = Order.objects.filter(id__in=ids).delete() + return Response({"deleted": deleted_count}, status=status.HTTP_200_OK) \ No newline at end of file diff --git a/core/apps/orders/views/party.py b/core/apps/orders/views/party.py index 53cd3f6..b3cbb40 100644 --- a/core/apps/orders/views/party.py +++ b/core/apps/orders/views/party.py @@ -224,4 +224,16 @@ class PartyStatisticsApiView(generics.GenericAPIView): 'usd': usd, 'uzs': uzs } - return Response(res, status=200) \ No newline at end of file + return Response(res, status=200) + + +class DeleteMultiplePartyApiView(views.APIView): + permission_classes = [HasRolePermission] + + def delete(self, request): + ids = request.data.get("party_ids", []) + if not ids: + return Response({"detail": "party_ids kerak"}, status=400) + + deleted_count, _ = Party.objects.filter(id__in=ids).delete() + return Response({"deleted": deleted_count}, status=200) \ No newline at end of file