Files
avto-cargo--wisdom--backend/core/apps/accounts/views.py
2025-08-30 16:41:44 +05:00

59 lines
2.2 KiB
Python

import random
from rest_framework import generics, views
from rest_framework.response import Response
from rest_framework_simplejwt.tokens import RefreshToken
from rest_framework_simplejwt.views import TokenObtainPairView
from core.apps.accounts import serializers
from core.apps.accounts import models
from core.apps.accounts.cache import cache_user_credentials, cache_user_confirmation_code
from core.apps.accounts.tasks import send_confirmation_email
class RegisterApiView(generics.GenericAPIView):
serializer_class = serializers.RegisterSerializer
queryset = models.User.objects.all()
def post(self, request):
serializer = self.serializer_class(data=request.data, context={"request": request})
if serializer.is_valid(raise_exception=True):
data = serializer.validated_data
email = data['email']
cache_user_credentials(
email=email, password=data['password'],
passport_id=data['passport_id'], pnfl=data['pnfl'], time=60*5
)
code = ''.join([str(random.randint(0, 100)%10) for _ in range(5)])
cache_user_confirmation_code(
email=email, code=code, time=60*5
)
send_confirmation_email.delay(email, code)
return Response(
{'success': True, 'message': "code sent"},
status=200
)
class ConfirmUserApiView(generics.GenericAPIView):
serializer_class = serializers.ConfirmUserSerializer
queryset = models.User.objects.all()
def post(self, request):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid(raise_exception=True):
user = serializer.save()
token = RefreshToken.for_user(user)
return Response(
{'access': str(token.access_token), 'refresh': str(token)},
status=200
)
return Response(
{'success': False, 'error_message': serializer.errors},
status=400
)
class CustomTokenObtainPairView(TokenObtainPairView):
serializer_class = serializers.CustomTokenObtainPairSerializer