Skip to content

Commit e5547f8

Browse files
committed
refactor(apps) add schemas for accounts views and debug all issues in drf spectacular console
1 parent 1502cb0 commit e5547f8

File tree

11 files changed

+135
-7969
lines changed

11 files changed

+135
-7969
lines changed

apps/orders/viewsets.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ class OrderViewSet(ListCacheMixin, LogicalDeleteMixin, ModelViewSet):
5050
# filterset_class = OrderFilter
5151

5252
def get_queryset(self):
53+
if getattr(self, "swagger_fake_view", False):
54+
return Order.objects.none()
55+
5356
user = self.request.user
5457
if self.action == "list":
5558
return Order.objects.get_list_by_user(user)
@@ -388,6 +391,9 @@ class OrderItemViewSet(ModelViewSet):
388391
# filterset_class = OrderItemFilter
389392

390393
def get_queryset(self):
394+
if getattr(self, "swagger_fake_view", False):
395+
return OrderItem.objects.none()
396+
# ! TODO: Add managers and optimize queries
391397
return OrderItem.objects.filter(
392398
order_id=self.kwargs["order_pk"]
393399
).select_related("order_id", "food_id")

apps/promotions/viewsets.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ class PromotionViewSet(ListCacheMixin, LogicalDeleteMixin, ModelViewSet):
3838
filterset_class = PromotionFilter
3939

4040
def get_queryset(self):
41+
if getattr(self, "swagger_fake_view", False):
42+
return Promotion.objects.none()
4143
return Promotion.objects.get_active()
4244

4345
def get_serializer_class(self):

apps/restaurants/schemas.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
"""Schemas for Restaurants App."""
22

3-
from drf_spectacular.utils import extend_schema, OpenApiResponse
3+
from drf_spectacular.utils import (
4+
extend_schema,
5+
OpenApiResponse,
6+
OpenApiParameter,
7+
)
48

59
from apps.reviews.serializers import ReviewReadSerializer, ReviewWriteSerializer
610
from apps.orders.serializers import OrderReadSerializer
@@ -288,6 +292,14 @@
288292
"list": extend_schema(
289293
summary="Get Several Restaurant Reviews",
290294
description="Get a list of all available restaurant reviews.",
295+
parameters=[
296+
OpenApiParameter(
297+
name="restaurant_pk",
298+
description="The UUID of the restaurant",
299+
required=True,
300+
type=str, # ! TODO: Fix type of path parameter restaurant_pk (UUID or SRT)
301+
),
302+
],
291303
responses={
292304
200: OpenApiResponse(
293305
response=ReviewReadSerializer(many=True),

apps/restaurants/viewsets.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,9 @@ class CategoryViewSet(ModelViewSet):
147147
search_fields = ["name"]
148148

149149
def get_queryset(self):
150+
if getattr(self, "swagger_fake_view", False):
151+
return Category.objects.none()
152+
# ! TODO: Add managers and optimize queries
150153
if self.action == "list":
151154
return Category.objects.filter(
152155
restaurant_id=self.kwargs["restaurant_pk"], is_available=True
@@ -227,6 +230,9 @@ class FoodViewSet(ModelViewSet):
227230
# Filterset_class = FoodFilter
228231

229232
def get_queryset(self):
233+
if getattr(self, "swagger_fake_view", False):
234+
return Food.objects.none()
235+
# ! TODO: Add managers and optimize queries
230236
if self.action == "list":
231237
return Food.objects.filter(restaurant_id=self.kwargs["restaurant_pk"]).only(
232238
"id",
@@ -318,6 +324,9 @@ class RestaurantReviewViewSet(ModelViewSet):
318324
# Filterset_class = ReviewFilter
319325

320326
def get_queryset(self):
327+
if getattr(self, "swagger_fake_view", False):
328+
return Review.objects.none()
329+
# ! TODO: Add managers and optimize queries
321330
return (
322331
Review.objects.filter(
323332
object_id=self.kwargs["restaurant_pk"],

apps/users/schemas.py

Lines changed: 80 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
"""Schemas for Users App."""
22

3-
from drf_spectacular.utils import extend_schema, OpenApiResponse
3+
from drf_spectacular.utils import extend_schema, OpenApiResponse, OpenApiParameter
44

5+
from apps.orders.serializers import OrderReadSerializer, OrderReportReadSerializer
6+
from apps.reviews.serializers import ReviewReadSerializer
57
from .serializers import (
68
UserReadSerializer,
79
UserWriteSerializer,
810
UserMinimalSerializer,
11+
UserHistorySerializer,
912
)
1013

1114

@@ -245,3 +248,79 @@
245248
tags=["socials"],
246249
),
247250
}
251+
252+
253+
user_review_schemas = {
254+
"get": extend_schema(
255+
summary="Get Reviews of Authenticated User",
256+
description="This endpoint returns a list of reviews created by the authenticated user, only for `IsClient` users.",
257+
responses={
258+
200: OpenApiResponse(
259+
response=ReviewReadSerializer(many=True),
260+
description="OK (List of reviews successfully retrieved)",
261+
),
262+
404: OpenApiResponse(
263+
description="Not Found (Reviews not found)",
264+
),
265+
},
266+
tags=["accounts"],
267+
),
268+
}
269+
270+
user_order_schemas = {
271+
"get": extend_schema(
272+
summary="Get Orders of Authenticated User",
273+
description="This endpoint returns a list of orders created by the authenticated user, only for `IsClient` users.",
274+
responses={
275+
200: OpenApiResponse(
276+
response=OrderReadSerializer(many=True),
277+
description="OK (List of orders successfully retrieved)",
278+
),
279+
404: OpenApiResponse(
280+
description="Not Found (Orders not found)",
281+
),
282+
},
283+
tags=["accounts"],
284+
),
285+
}
286+
287+
288+
user_order_report_schemas = {
289+
"get": extend_schema(
290+
summary="Get Order Reports of Authenticated User",
291+
description="This endpoint returns a list of order reports created by the authenticated user, only for `IsClient` users.",
292+
responses={
293+
200: OpenApiResponse(
294+
response=OrderReportReadSerializer(many=True),
295+
description="OK (List of orders reports successfully retrieved)",
296+
),
297+
404: OpenApiResponse(
298+
description="Not Found (Orders reports not found)",
299+
),
300+
},
301+
tags=["accounts"],
302+
),
303+
}
304+
305+
306+
user_history_schemas = {
307+
"get": extend_schema(
308+
summary="Get User History",
309+
description="This endpoint returns a history of actions performed by a specific user, identified by user ID, only for `IsAdministrator` users.",
310+
parameters=[
311+
OpenApiParameter(
312+
"id", description="ID of the user", required=True, type=int
313+
),
314+
],
315+
responses={
316+
200: OpenApiResponse(
317+
response=UserHistorySerializer(many=True),
318+
description="OK (List of user history successfully retrieved)",
319+
),
320+
404: OpenApiResponse(
321+
description="Not Found (User not found)",
322+
),
323+
},
324+
tags=["accounts"],
325+
),
326+
}

apps/users/views.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424
token_refresh_schemas,
2525
token_verify_schemas,
2626
provider_auth_schemas,
27+
user_review_schemas,
28+
user_order_schemas,
29+
user_order_report_schemas,
30+
user_history_schemas,
2731
)
2832

2933

@@ -75,6 +79,7 @@ class ProviderAuthExtensionView(ProviderAuthView):
7579
pass
7680

7781

82+
@extend_schema_view(**user_review_schemas)
7883
class UserReviewsView(ListAPIView):
7984
"""
8085
View to list all reviews of a user.
@@ -88,9 +93,12 @@ class UserReviewsView(ListAPIView):
8893
# filterset_class = ReviewFilter
8994

9095
def get_queryset(self):
96+
if getattr(self, "swagger_fake_view", False):
97+
return Review.objects.none()
9198
return Review.objects.filter(user_id=self.request.user)
9299

93100

101+
@extend_schema_view(**user_order_schemas)
94102
class UserOrdersView(ListAPIView):
95103
"""
96104
View to list all orders of a user.
@@ -104,9 +112,12 @@ class UserOrdersView(ListAPIView):
104112
# filterset_class = OrderFilter
105113

106114
def get_queryset(self):
115+
if getattr(self, "swagger_fake_view", False):
116+
return Order.objects.none()
107117
return Order.objects.filter(user_id=self.request.user)
108118

109119

120+
@extend_schema_view(**user_order_report_schemas)
110121
class UserOrderReportsView(ListAPIView):
111122
"""
112123
View to list all order reports of a user.
@@ -119,9 +130,12 @@ class UserOrderReportsView(ListAPIView):
119130
serializer_class = OrderReportReadSerializer
120131

121132
def get_queryset(self):
133+
if getattr(self, "swagger_fake_view", False):
134+
return OrderReport.objects.none()
122135
return OrderReport.objects.get_by_user(self.request.user)
123136

124137

138+
@extend_schema_view(**user_history_schemas)
125139
class UserHistoryView(APIView):
126140
"""
127141
View to list all history of a user.

config/settings/base.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,10 @@
300300
"name": "users",
301301
"description": "Operations related to users",
302302
},
303+
{
304+
"name": "accounts",
305+
"description": "Operations related to accounts",
306+
},
303307
{
304308
"name": "positions",
305309
"description": "Operations related to positions",

0 commit comments

Comments
 (0)