from rest_framework import permissions, status from rest_framework.response import Response from rest_framework.views import APIView from .serializers import LoginSerializer, LogoutSerializer, RegistrationSerializer class RegisterView(APIView): permission_classes = [permissions.AllowAny] throttle_scope = "auth" def post(self, request): serializer = RegistrationSerializer(data=request.data) if not serializer.is_valid(): return Response( {"errors": serializer.errors}, status=status.HTTP_400_BAD_REQUEST, ) user = serializer.save() login_serializer = LoginSerializer( data={ "email": user.email, "password": request.data.get("password"), }, context={"request": request}, ) login_serializer.is_valid(raise_exception=True) tokens = login_serializer.save() return Response( { "user": { "id": user.id, "email": user.email, }, "tokens": tokens, }, status=status.HTTP_201_CREATED, ) class LoginView(APIView): permission_classes = [permissions.AllowAny] throttle_scope = "auth" def post(self, request): serializer = LoginSerializer(data=request.data, context={"request": request}) if not serializer.is_valid(): return Response( {"errors": serializer.errors}, status=status.HTTP_400_BAD_REQUEST, ) tokens = serializer.save() return Response({"tokens": tokens}, status=status.HTTP_200_OK) class LogoutView(APIView): permission_classes = [permissions.IsAuthenticated] def post(self, request): serializer = LogoutSerializer(data=request.data) if not serializer.is_valid(): return Response( {"errors": serializer.errors}, status=status.HTTP_400_BAD_REQUEST, ) serializer.save() return Response({"detail": "Logged out."}, status=status.HTTP_200_OK)