From d7e5b622193e0bd456d1c5f099a8e9cd7cafdba6 Mon Sep 17 00:00:00 2001 From: sm4640 Date: Thu, 15 May 2025 00:06:38 +0900 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Feat:=20[#25]=20usetype=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=9D=BC=20=EC=9D=B8=EC=A6=9D=20=EB=B0=9C=EC=86=A1=20?= =?UTF-8?q?=EB=B0=8F=20=EC=9D=B8=EC=A6=9D=EB=B2=88=ED=98=B8=20=EC=B2=B4?= =?UTF-8?q?=ED=81=AC=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- codes/views.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/codes/views.py b/codes/views.py index 91ea44a..1457eb9 100644 --- a/codes/views.py +++ b/codes/views.py @@ -1,3 +1,56 @@ -from django.shortcuts import render +from django.shortcuts import get_object_or_404 -# Create your views here. +from rest_framework.views import APIView +from rest_framework.permissions import AllowAny, IsAuthenticated + +from rest_framework import status +from rest_framework.response import Response +from django.core.mail import EmailMessage +from django.db import transaction + +from .serializers import * +from .services import * +from common.models.choiceModels import CertificateCodeUseType +from common.utils.codeManger import generate_code + + +certificate_use_type = { + "phone": SmsService, + # "email": EmailService +} + +class CertificationAPIView(APIView): + permission_classes = [AllowAny] + + # 인증 발송 + @transaction.atomic + def post(self, request): + use_type = request.query_params.get("type") + serv = certificate_use_type[use_type] + serializer = CertificateCodeSerializer(data=request.data) + if serializer.is_valid(): + create_code = generate_code(6) + if serv.save_certificate_info(use_type, create_code, serializer.validated_data['identifier']): + if serv.send(create_code, serializer.validated_data['identifier']): + return Response({'message': "success send and save"}) + else: # 전송 실패 + return Response({"message": "failed send"}) + else: # 코드 저장 실패 + return Response({'message': "failed save"}, status=status.HTTP_400_BAD_REQUEST) + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + + + # 인증 확인 + @transaction.atomic + def patch(self, request): + use_type = request.query_params.get("type") + serv = certificate_use_type[use_type] + code = request.data.get('code', None) + if not code: + return Response({"message": "no code"}, status=status.HTTP_400_BAD_REQUEST) + serializer = CertificateCodeSerializer(data=request.data) + if serializer.is_valid(): + if serv.check_code(use_type, code, serializer.validated_data['identifier']): + return Response({"message": "certificated successfully"}, status=status.HTTP_200_OK) + return Response({"message": "wrong code, please retry"}, status=status.HTTP_400_BAD_REQUEST) + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)