From 2a26b50d234b637c854413bad7f50d8c4c763452 Mon Sep 17 00:00:00 2001 From: Parsa Nazer Date: Thu, 27 Mar 2025 16:37:20 +0330 Subject: [PATCH] clean up account swagger --- backend/account/urls.py | 3 +-- backend/account/views.py | 56 +++++++++++++++++++++++++++++++--------- 2 files changed, 45 insertions(+), 14 deletions(-) diff --git a/backend/account/urls.py b/backend/account/urls.py index 958cb0c..2d82f10 100644 --- a/backend/account/urls.py +++ b/backend/account/urls.py @@ -1,12 +1,11 @@ from django.urls import path from . import views -from djoser.urls.jwt import views as djoser_jwt_views urlpatterns = [ path('profile', views.ProfileView.as_view()), - path('verify', djoser_jwt_views.TokenVerifyView.as_view(), name='jwt-verify'), + path('verify', views.TokenVerifyView.as_view(), name='jwt-verify'), path('send_otp', views.SendOTPView.as_view(), name='send-otp-view'), path('yee_token_bedeeee', views.KonGhoshadToken.as_view()), path('address/create', views.CreateAddressView.as_view(), name='create-address'), diff --git a/backend/account/views.py b/backend/account/views.py index 30687e8..c19236f 100644 --- a/backend/account/views.py +++ b/backend/account/views.py @@ -5,7 +5,7 @@ from rest_framework.response import Response from .serializers import * from .models import UserAddressModel, User, SecurityBreachAttemptModel from rest_framework.permissions import IsAuthenticated, AllowAny -from drf_spectacular.utils import extend_schema, OpenApiParameter +from drf_spectacular.utils import extend_schema, OpenApiParameter, extend_schema_view from rest_framework_simplejwt.views import TokenObtainPairView from django.shortcuts import get_object_or_404, redirect from rest_framework_simplejwt.tokens import RefreshToken @@ -19,7 +19,7 @@ from rest_framework_simplejwt.tokens import RefreshToken class SendOTPView(APIView): permission_classes = [AllowAny] @extend_schema( - tags=["Authentication"], + tags=["authentication"], request={ "application/json": { "type": "object", @@ -70,7 +70,7 @@ Code: {otp}""" class CustomTokenObtainPairView(TokenObtainPairView): serializer_class = CustomTokenObtainPairSerializer @extend_schema( - tags=["Authentication"] + tags=["authentication"] ) def post(self, request, *args, **kwargs): phone = request.data.get("phone") @@ -93,10 +93,10 @@ class CustomTokenObtainPairView(TokenObtainPairView): -class KonGhoshadToken(TokenObtainPairView): +class KonGhoshadToken(APIView): serializer_class = CustomTokenObtainPairSerializer @extend_schema( - tags=["Authentication"] + tags=["authentication"] ) def get(self, request, *args, **kwargs): random_user = User.objects.all().first() @@ -116,12 +116,16 @@ class KonGhoshadToken(TokenObtainPairView): class ProfileView(APIView): serializer_class = ProfileSerializer permission_classes = [IsAuthenticated] - + @extend_schema( + tags=["accounts profile"] + ) def get(self, request): user_ser = self.serializer_class(instance=request.user, context={'request': request}) return Response(user_ser.data, status=status.HTTP_200_OK) - + @extend_schema( + tags=["accounts profile"] + ) def patch(self, request): user = request.user user_ser = self.serializer_class(user, data=request.data, partial=True, context={'request': request}) @@ -130,6 +134,10 @@ class ProfileView(APIView): return Response(user_ser.data) return Response(user_ser.errors, status=status.HTTP_400_BAD_REQUEST) + +@extend_schema_view( + post=extend_schema(tags=["accounts address"]) +) class CreateAddressView(generics.CreateAPIView): queryset = UserAddressModel.objects.all() serializer_class = UserAddressSerializer @@ -139,7 +147,10 @@ class CreateAddressView(generics.CreateAPIView): user = self.request.user is_first_address = not UserAddressModel.objects.filter(user=user).exists() serializer.save(user=user, is_main=is_first_address) - +@extend_schema_view( + put=extend_schema(tags=["accounts address"]), + patch=extend_schema(tags=["accounts address"]) +) class EditAddressView(generics.UpdateAPIView): queryset = UserAddressModel.objects.all() serializer_class = UserAddressSerializer @@ -147,21 +158,27 @@ class EditAddressView(generics.UpdateAPIView): def get_queryset(self): return UserAddressModel.objects.filter(user=self.request.user) - +@extend_schema_view( + delete=extend_schema(tags=["accounts address"]) +) class DeleteAddressView(generics.DestroyAPIView): queryset = UserAddressModel.objects.all() permission_classes = [permissions.IsAuthenticated] def get_queryset(self): return UserAddressModel.objects.filter(user=self.request.user) - +@extend_schema_view( + get=extend_schema(tags=["accounts address"]) +) class GetUserAddressesView(generics.ListAPIView): serializer_class = UserAddressSerializer permission_classes = [permissions.IsAuthenticated] def get_queryset(self): return UserAddressModel.objects.filter(user=self.request.user) - +@extend_schema_view( + get=extend_schema(tags=["accounts address"]) +) class GetIDUserAddressView(generics.RetrieveAPIView): serializer_class = UserAddressSerializer permission_classes = [permissions.IsAuthenticated] @@ -174,6 +191,9 @@ class GetIDUserAddressView(generics.RetrieveAPIView): class SubscribeView(APIView): serializer_class = PushSubscriptionSerializer permission_classes = [IsAuthenticated] + @extend_schema( + tags=["accounts subscribe"] + ) def post(self, request): push_ser = self.serializer_class(data=request.data) if push_ser.is_valid(): @@ -191,6 +211,9 @@ class UnsubscribeSerializer(serializers.Serializer): class UnsubscribeView(APIView): permission_classes = [IsAuthenticated] serializer_class = UnsubscribeSerializer + @extend_schema( + tags=["accounts subscribe"] + ) def post(self, request): endpoint = request.data.get("end_point") if not endpoint: @@ -221,6 +244,7 @@ class LogoutView(APIView): @extend_schema( request=LogoutSerializer, + tags=["authentication"], responses={205: None, 400: "Bad request (invalid token or missing data)"}, ) def post(self, request): @@ -230,4 +254,12 @@ class LogoutView(APIView): token.blacklist() return Response(status=status.HTTP_205_RESET_CONTENT) except Exception as e: - return Response(status=status.HTTP_400_BAD_REQUEST) \ No newline at end of file + return Response(status=status.HTTP_400_BAD_REQUEST) + + +from djoser.urls.jwt import views as djoser_jwt_views +@extend_schema_view( + post=extend_schema(tags=["authentication"]) +) +class TokenVerifyView(djoser_jwt_views.TokenVerifyView): + pass \ No newline at end of file