1-
21# views.py
3- from django .db import transaction
42from rest_framework import viewsets , status
53from rest_framework .response import Response
64
75from .models import BookLending
86from .serializers import BookLendingSerializer
9- from .services .datamanager .engine import DataManagerEngine
10- from .services .ej2_crud import handle_crud_action
7+ from .services .data_handler .engine import DataHanlerEngine
8+ from .services .crud_handler import handle_crud_action
119
1210
1311class BookLendingViewSet (viewsets .ModelViewSet ):
@@ -21,7 +19,10 @@ class BookLendingViewSet(viewsets.ModelViewSet):
2119 queryset = BookLending .objects .all ()
2220 serializer_class = BookLendingSerializer
2321
24- dm_engine = DataManagerEngine ()
22+ # Allow only POST on the endpoint (blocks GET/PUT/PATCH/DELETE)
23+ http_method_names = ["post" ]
24+
25+ dm_engine = DataHanlerEngine ()
2526
2627 def create (self , request , * args , ** kwargs ):
2728 payload = request .data
@@ -32,49 +33,30 @@ def create(self, request, *args, **kwargs):
3233
3334 if mode == "values" :
3435 # select-mode returns list[dict] (already projected)
35- response_payload = {'result' : data , 'count' : total_count } if requires_counts else data
36- return Response (response_payload , status = status .HTTP_200_OK )
36+ return Response (
37+ {'result' : data , 'count' : total_count } if requires_counts else data ,
38+ status = status .HTTP_200_OK
39+ )
3740
3841 # rows-mode: serialize model instances
3942 serialized = self .get_serializer (data , many = True ).data
40- response_payload = {'result' : serialized , 'count' : total_count } if requires_counts else serialized
41- return Response (response_payload , status = status .HTTP_200_OK )
43+ return Response (
44+ {'result' : serialized , 'count' : total_count } if requires_counts else serialized ,
45+ status = status .HTTP_200_OK
46+ )
4247
4348 # 2) UrlAdaptor CRUD actions via POST
4449 crud_response = handle_crud_action (self , payload )
4550 if crud_response is not None :
4651 return crud_response
4752
48- # 3) Fallback: standard RESTful create
49- serializer = self .get_serializer (data = payload )
50- serializer .is_valid (raise_exception = True )
51- with transaction .atomic ():
52- self .perform_create (serializer )
53- instance = serializer .instance
54- if instance is not None :
55- instance .refresh_from_db ()
56- output_data = self .get_serializer (instance ).data
57- headers = self .get_success_headers (serializer .data )
58- return Response (output_data , status = status .HTTP_201_CREATED , headers = headers )
59-
60- def update (self , request , * args , ** kwargs ):
61- partial = kwargs .pop ('partial' , False )
62- instance = self .get_object ()
63- serializer = self .get_serializer (instance , data = request .data , partial = partial )
64- serializer .is_valid (raise_exception = True )
65- with transaction .atomic ():
66- self .perform_update (serializer )
67- instance .refresh_from_db ()
68- output_data = self .get_serializer (instance ).data
69- return Response (output_data , status = status .HTTP_200_OK )
70-
71- def partial_update (self , request , * args , ** kwargs ):
72- kwargs ['partial' ] = True
73- return self .update (request , * args , ** kwargs )
74-
75- def destroy (self , request , * args , ** kwargs ):
76- instance = self .get_object ()
77- deleted_payload = self .get_serializer (instance ).data # capture before deletion
78- with transaction .atomic ():
79- self .perform_destroy (instance )
80- return Response (deleted_payload , status = status .HTTP_200_OK )
53+ # 3) Unsupported payload
54+ return Response (
55+ {
56+ "detail" : (
57+ "Unsupported POST payload. Expected Syncfusion DataManager read payload "
58+ "or UrlAdaptor CRUD action ('insert' | 'update' | 'remove')."
59+ )
60+ },
61+ status = status .HTTP_400_BAD_REQUEST
62+ )
0 commit comments