From 37dea6b5a8f186f3c7ce8c13d769190e8c55ae74 Mon Sep 17 00:00:00 2001 From: mohsentaba Date: Sat, 4 Jul 2026 12:42:58 +0330 Subject: [PATCH] narrators reorder action api added --- apps/hadis/views_admin.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/apps/hadis/views_admin.py b/apps/hadis/views_admin.py index 19b74c1..26c6979 100644 --- a/apps/hadis/views_admin.py +++ b/apps/hadis/views_admin.py @@ -535,3 +535,24 @@ class AdminHadisTransmitterViewSet(ModelViewSet): if hadis_id: queryset = queryset.filter(hadis_id=hadis_id) return queryset.order_by("order") + + @action(detail=False, methods=["post"]) + def reorder(self, request): + from rest_framework.decorators import action + from rest_framework.response import Response + from django.db import transaction + + hadis_transmitter_ids = request.data.get("hadis_transmitter_ids", []) + if not hadis_transmitter_ids: + return Response({"error": "hadis_transmitter_ids list is required"}, status=400) + + with transaction.atomic(): + # Pass 1: Set temporary positive offset order indices to avoid duplicate key violations (>= 0) + for index, ht_id in enumerate(hadis_transmitter_ids): + HadisTransmitter.objects.filter(id=ht_id).update(order=10000 + index) + + # Pass 2: Set final sequential order indices starting from 0 + for index, ht_id in enumerate(hadis_transmitter_ids): + HadisTransmitter.objects.filter(id=ht_id).update(order=index) + + return Response({"status": "success"})