adding
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
from rest_framework import status
|
||||
from rest_framework.permissions import AllowAny, IsAuthenticated
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework_simplejwt.tokens import RefreshToken
|
||||
|
||||
from apps.account.models import TermsAndConditions
|
||||
|
||||
from .selectors import UserSelector
|
||||
from .serializers import (
|
||||
ConfirmWithOTPSerializer,
|
||||
LogoutSerializer,
|
||||
ProfileUpdateSerializer,
|
||||
RequestOTPSerializer,
|
||||
VerifyOTPSerializer,
|
||||
)
|
||||
from .services import UserService
|
||||
from .throttles import OTPVerifyThrottle, PhoneRateThrottle
|
||||
|
||||
|
||||
class RequestOTPView(APIView):
|
||||
"""ارسال کد تایید به شماره موبایل (کاربر جدید هم همینجا خودکار ساخته میشود)"""
|
||||
|
||||
permission_classes = [AllowAny]
|
||||
throttle_classes = [PhoneRateThrottle]
|
||||
|
||||
def post(self, request):
|
||||
serializer = RequestOTPSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
result = UserService.send_login_code(
|
||||
serializer.validated_data["phone"], referral_code=serializer.validated_data.get("referral_code")
|
||||
)
|
||||
return Response(result, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class TermsView(APIView):
|
||||
"""متن قوانین و مقررات — قبل از لاگین هم باید قابلخواندن باشد."""
|
||||
|
||||
permission_classes = [AllowAny]
|
||||
|
||||
def get(self, request):
|
||||
return Response({"content": TermsAndConditions.get_solo().content})
|
||||
|
||||
|
||||
class VerifyOTPView(APIView):
|
||||
"""تایید کد و دریافت توکنهای JWT"""
|
||||
|
||||
permission_classes = [AllowAny]
|
||||
throttle_classes = [OTPVerifyThrottle]
|
||||
|
||||
def post(self, request):
|
||||
serializer = VerifyOTPSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
user = serializer.validated_data["user"]
|
||||
return Response(UserSelector.get_token_response(user), status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class LogoutView(APIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def post(self, request):
|
||||
serializer = LogoutSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
try:
|
||||
RefreshToken(serializer.validated_data["refresh"]).blacklist()
|
||||
except Exception:
|
||||
pass
|
||||
return Response({"message": "خروج با موفقیت انجام شد."})
|
||||
|
||||
|
||||
class ProfileView(APIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get(self, request):
|
||||
return Response({"success": True, "data": UserSelector.get_user_profile(request.user)})
|
||||
|
||||
def patch(self, request):
|
||||
serializer = ProfileUpdateSerializer(data=request.data, partial=True)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
user = UserService.update_user_profile(request.user, serializer.validated_data)
|
||||
return Response(
|
||||
{
|
||||
"success": True,
|
||||
"message": "پروفایل با موفقیت بروزرسانی شد.",
|
||||
"data": UserSelector.get_user_profile(user),
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
class ProfileDeleteView(APIView):
|
||||
"""حذف حساب کاربری — نیاز به تایید OTP دارد (اول /auth/request-otp/ بزن)"""
|
||||
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def delete(self, request):
|
||||
serializer = ConfirmWithOTPSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
UserService.verify_otp_for_action(request.user, serializer.validated_data["otp"])
|
||||
request.user.delete()
|
||||
return Response({"message": "حساب کاربری با موفقیت حذف شد."})
|
||||
Reference in New Issue
Block a user