File: //home/arjun/projects/unlimited-leads/Unlimited-Leads-Be/authorization/auth_views/signup.py
from rest_framework.views import APIView
from rest_framework.response import Response
from drf_yasg.utils import swagger_auto_schema
from drf_yasg import openapi
from rest_framework import status
from utils.utils import get_first_error
from ..models import VerificationMailRequest
from ..serializers import UserSignupSerializer
from ..tasks import send_account_verification_email
class SignupUserView(APIView):
@swagger_auto_schema(
operation_summary="Signup",
tags=["Auth"],
request_body=UserSignupSerializer,
responses={
status.HTTP_201_CREATED: openapi.Response(
description="Signup Successful.",
schema=openapi.Schema(
type=openapi.TYPE_OBJECT,
properties={
"data": openapi.Schema(type=openapi.TYPE_OBJECT),
"message": openapi.Schema(type=openapi.TYPE_STRING),
"success": openapi.Schema(type=openapi.TYPE_BOOLEAN),
"statusCode": openapi.Schema(type=openapi.TYPE_INTEGER),
},
),
),
status.HTTP_400_BAD_REQUEST: openapi.Response(
description="Bad request, validation error.",
schema=openapi.Schema(
type=openapi.TYPE_OBJECT,
properties={
"errors": openapi.Schema(
type=openapi.TYPE_ARRAY,
items=openapi.Schema(type=openapi.TYPE_STRING),
),
"message": openapi.Schema(type=openapi.TYPE_STRING),
"success": openapi.Schema(type=openapi.TYPE_BOOLEAN),
"statusCode": openapi.Schema(type=openapi.TYPE_INTEGER),
},
),
),
},
)
def post(self, request):
serializer = UserSignupSerializer(data=request.data)
if not serializer.is_valid():
return Response(
{
"success": False,
"message": get_first_error(serializer.errors, "Signup failed"),
"statusCode": status.HTTP_400_BAD_REQUEST,
},
status=status.HTTP_400_BAD_REQUEST,
)
user = serializer.save()
verification_mail = VerificationMailRequest.objects.create(user=user)
verification_mail.generate_otp()
send_account_verification_email.delay(user.id, verification_mail.otp)
return Response(
{
"success": True,
"message": "Signup successful",
"statusCode": status.HTTP_201_CREATED,
},
status=status.HTTP_201_CREATED,
)