14
14
from django_filters import rest_framework as filters
15
15
16
16
from nxtbn .core import PublishableStatus
17
+ from nxtbn .core .admin_permissions import CommonPermissions , GranularPermission
18
+ from nxtbn .core .enum_perms import PermissionsEnum
17
19
from nxtbn .core .paginator import NxtbnPagination
18
20
from nxtbn .product .models import CategoryTranslation , CollectionTranslation , Color , Product , Category , Collection , ProductTag , ProductTagTranslation , ProductTranslation , ProductType , ProductVariant , Supplier , SupplierTranslation
19
21
from nxtbn .product .api .dashboard .serializers import (
@@ -111,6 +113,8 @@ def get_queryset(self):
111
113
return Product .objects .all ().order_by ('-created_at' )
112
114
113
115
class ProductListView (ProductFilterMixin , generics .ListCreateAPIView ):
116
+ permission_classes = (CommonPermissions , )
117
+ model = Product
114
118
serializer_class = ProductSerializer
115
119
pagination_class = NxtbnPagination
116
120
@@ -120,6 +124,8 @@ def get_serializer_class(self):
120
124
return ProductSerializer
121
125
122
126
class ProductMinimalListView (ProductFilterMixin , generics .ListAPIView ):
127
+ permission_classes = (CommonPermissions , )
128
+ model = Product
123
129
serializer_class = ProductMinimalSerializer
124
130
pagination_class = None
125
131
@@ -136,6 +142,8 @@ def get(self, request, *args, **kwargs):
136
142
137
143
138
144
class ProductListDetailVariantView (ProductFilterMixin , generics .ListAPIView ):
145
+ permission_classes = (CommonPermissions , )
146
+ model = Product
139
147
serializer_class = ProductWithVariantSerializer
140
148
pagination_class = NxtbnPagination
141
149
@@ -146,28 +154,38 @@ def get_queryset(self):
146
154
147
155
148
156
class ProductDetailView (generics .RetrieveUpdateDestroyAPIView ):
157
+ permission_classes = (CommonPermissions , )
158
+ model = Product
149
159
queryset = Product .objects .all ()
150
160
serializer_class = ProductMutationSerializer
151
161
lookup_field = 'id'
152
162
153
163
154
164
class ProductWithVariantView (generics .RetrieveAPIView ):
165
+ permission_classes = (CommonPermissions , )
166
+ model = Product
155
167
queryset = Product .objects .all ()
156
168
serializer_class = ProductWithVariantSerializer
157
169
lookup_field = 'id'
158
170
159
171
160
172
class CategoryListView (generics .ListCreateAPIView ):
173
+ permission_classes = (CommonPermissions , )
174
+ model = Category
161
175
queryset = Category .objects .filter ()
162
176
serializer_class = CategorySerializer
163
177
164
178
165
179
class RecursiveCategoryListView (generics .ListCreateAPIView ):
180
+ permission_classes = (CommonPermissions , )
181
+ model = Category
166
182
queryset = Category .objects .filter (parent = None ) # Get only top-level categories
167
183
serializer_class = RecursiveCategorySerializer
168
184
pagination_class = None
169
185
170
186
class CategoryByParentView (generics .ListAPIView ):
187
+ permission_classes = (CommonPermissions , )
188
+ model = Category
171
189
pagination_class = None
172
190
queryset = Category .objects .all ()
173
191
serializer_class = BasicCategorySerializer
@@ -176,13 +194,17 @@ def get_queryset(self):
176
194
return super ().get_queryset ().filter (parent = self .kwargs .get ('id' ))
177
195
178
196
class CategoryDetailView (generics .RetrieveUpdateDestroyAPIView ):
197
+ permission_classes = (CommonPermissions , )
198
+ model = Category
179
199
queryset = Category .objects .all ()
180
200
serializer_class = CategorySerializer
181
201
lookup_field = 'id'
182
202
183
203
184
204
185
205
class CollectionViewSet (viewsets .ModelViewSet ):
206
+ permission_classes = (CommonPermissions , )
207
+ model = Collection
186
208
pagination_class = None
187
209
queryset = Collection .objects .all ()
188
210
serializer_class = CollectionSerializer
@@ -193,6 +215,8 @@ def get_queryset(self):
193
215
return Collection .objects .all ()
194
216
195
217
class ColorViewSet (viewsets .ModelViewSet ):
218
+ permission_classes = (CommonPermissions , )
219
+ model = Color
196
220
pagination_class = None
197
221
queryset = Color .objects .all ()
198
222
serializer_class = ColorSerializer
@@ -204,6 +228,8 @@ def get_queryset(self):
204
228
205
229
206
230
class ProductTypeViewSet (viewsets .ModelViewSet ):
231
+ permission_classes = (CommonPermissions , )
232
+ model = ProductType
207
233
pagination_class = None
208
234
queryset = ProductType .objects .all ()
209
235
serializer_class = ProductTypeSerializer
@@ -214,6 +240,8 @@ def get_queryset(self):
214
240
215
241
216
242
class ProductTagViewSet (viewsets .ModelViewSet ):
243
+ permission_classes = (CommonPermissions , )
244
+ model = ProductTag
217
245
pagination_class = None
218
246
queryset = ProductTag .objects .all ()
219
247
serializer_class = ProductTagSerializer
@@ -230,6 +258,8 @@ def list(self, request, *args, **kwargs):
230
258
231
259
232
260
class ProductVariantDeleteAPIView (generics .DestroyAPIView ):
261
+ permission_classes = (CommonPermissions , )
262
+ model = ProductVariant
233
263
queryset = ProductVariant .objects .all ()
234
264
235
265
def destroy (self , request , * args , ** kwargs ):
@@ -243,13 +273,18 @@ def destroy(self, request, *args, **kwargs):
243
273
244
274
245
275
class TaxClassView (generics .ListCreateAPIView ):
276
+ permission_classes = (CommonPermissions , )
277
+ model = TaxClass
246
278
queryset = TaxClass .objects .all ()
247
279
serializer_class = TaxClassSerializer
248
280
pagination_class = None
249
281
250
282
251
283
252
284
class BulkProductStatusUpdateAPIView (generics .UpdateAPIView ):
285
+ permission_classes = (GranularPermission , )
286
+ model = Product
287
+ required_perm = PermissionsEnum .CAN_BULK_PRODUCT_STATUS_UPDATE
253
288
serializer_class = ProductStatusUpdateBulkSerializer
254
289
255
290
def update (self , request , * args , ** kwargs ):
@@ -264,6 +299,9 @@ def update(self, request, *args, **kwargs):
264
299
265
300
266
301
class BulkProductDeleteAPIView (generics .DestroyAPIView ):
302
+ permission_classes = (GranularPermission , )
303
+ model = Product
304
+ required_perm = PermissionsEnum .CAN_BULK_PRODUCT_DELETE
267
305
queryset = Product .objects .all ()
268
306
269
307
@@ -311,6 +349,8 @@ class ProductVariantFilterMixin:
311
349
filterset_class = ProductVariantFilter
312
350
313
351
class ProductVariants (ProductVariantFilterMixin , generics .ListAPIView ):
352
+ permission_classes = (CommonPermissions , )
353
+ model = ProductVariant
314
354
serializer_class = ProductVariantShortSerializer
315
355
queryset = ProductVariant .objects .all ()
316
356
pagination_class = NxtbnPagination
@@ -331,12 +371,16 @@ class ProductVariants(ProductVariantFilterMixin, generics.ListAPIView):
331
371
332
372
333
373
class InventoryListView (ProductFilterMixin , generics .ListCreateAPIView ):
374
+ permission_classes = (CommonPermissions , )
375
+ model = ProductVariant
334
376
serializer_class = InventorySerializer
335
377
pagination_class = NxtbnPagination
336
378
337
379
338
380
339
381
class SupplierModelViewSet (viewsets .ModelViewSet ):
382
+ permission_classes = (CommonPermissions , )
383
+ model = Supplier
340
384
serializer_class = SupplierSerializer
341
385
queryset = Supplier .objects .all ()
342
386
pagination_class = NxtbnPagination
0 commit comments