Skip to content

Commit a9d07fb

Browse files
Merge pull request #19 from RandomProgramm3r/develop
feat(business): Add GET endpoint /api/business/promo/{id}/. - Add GET endpoint /api/business/promo/{id}/ to get promo by id. - Ensure that requested promo belongs to the authenticated company. - Return 403 if promo does not belong to the current company, and 404 if it does not exist.
2 parents b8ecc6b + b9592cd commit a9d07fb

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

promo_code/business/urls.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,9 @@
3131
business.views.CompanyPromoListView.as_view(),
3232
name='company-promo-list',
3333
),
34+
django.urls.path(
35+
'promo/<uuid:id>',
36+
business.views.CompanyPromoDetailView.as_view(),
37+
name='promo-detail',
38+
),
3439
]

promo_code/business/views.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import re
22

33
import django.db.models
4+
import django.shortcuts
45
import pycountry
56
import rest_framework.exceptions
67
import rest_framework.generics
78
import rest_framework.permissions
89
import rest_framework.response
910
import rest_framework.serializers
1011
import rest_framework.status
12+
import rest_framework.views
1113
import rest_framework_simplejwt.exceptions
1214
import rest_framework_simplejwt.tokens
1315
import rest_framework_simplejwt.views
@@ -275,3 +277,42 @@ def _validate_limit(self):
275277
raise rest_framework.exceptions.ValidationError(
276278
'Limit cannot be negative.',
277279
)
280+
281+
282+
class CompanyPromoDetailView(rest_framework.views.APIView):
283+
permission_classes = [
284+
rest_framework.permissions.IsAuthenticated,
285+
business.permissions.IsCompanyUser,
286+
]
287+
288+
lookup_field = 'id'
289+
290+
def get(self, request, id):
291+
try:
292+
promo = business.models.Promo.objects.get(
293+
id=id,
294+
)
295+
except business.models.Promo.DoesNotExist:
296+
raise rest_framework.exceptions.NotFound(
297+
'Promo not found,',
298+
)
299+
300+
if promo.company != request.user:
301+
return rest_framework.response.Response(
302+
{
303+
'status': 'error',
304+
'message': (
305+
'The promo code does not belong to this company.'
306+
),
307+
},
308+
status=rest_framework.status.HTTP_403_FORBIDDEN,
309+
)
310+
311+
serializer = business.serializers.PromoCreateSerializer(
312+
promo,
313+
)
314+
315+
return rest_framework.response.Response(
316+
serializer.data,
317+
status=rest_framework.status.HTTP_200_OK,
318+
)

0 commit comments

Comments
 (0)