@@ -8,14 +8,19 @@ from datetime import timedelta
|
|||||||
# 30일 이전 일수 계산
|
# 30일 이전 일수 계산
|
||||||
thirty_days_ago = timezone.now() - timedelta(days=30)
|
thirty_days_ago = timezone.now() - timedelta(days=30)
|
||||||
|
|
||||||
|
DUPLICATE_CHECK = {
|
||||||
|
'email': 'email',
|
||||||
|
'nickname': 'nickname'
|
||||||
|
}
|
||||||
|
|
||||||
class CheckUserFieldDuplicateService:
|
class CheckUserFieldDuplicateService:
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def check_nickname_duplicate(query):
|
def check_duplicate(field: str, value: str) -> bool:
|
||||||
pass
|
if field not in DUPLICATE_CHECK:
|
||||||
|
raise ValueError(f"{field}는 지원하지 않는 필드입니다.")
|
||||||
@staticmethod
|
|
||||||
def check_custom_url_duplicate():
|
filter_dict = {DUPLICATE_CHECK[field]:value}
|
||||||
pass
|
return User.objects.filter(**filter_dict).exists()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ urlpatterns = [
|
|||||||
path('refresh-token/', RefreshAPIView.as_view()),
|
path('refresh-token/', RefreshAPIView.as_view()),
|
||||||
path('join/', JoinAPIView.as_view()),
|
path('join/', JoinAPIView.as_view()),
|
||||||
path('login/', LoginAPIView.as_view()),
|
path('login/', LoginAPIView.as_view()),
|
||||||
path('check/', NicknameAPIView.as_view()),
|
path('check/', CheckUserFieldDuplicateAPIView.as_view()),
|
||||||
path('portfolio-info/', SetPortofolioRequiredInfoAPIView.as_view()),
|
path('portfolio-info/', SetPortofolioRequiredInfoAPIView.as_view()),
|
||||||
path('portfolio-info/check/', SetPortofolioRequiredInfoAPIView.as_view()),
|
path('portfolio-info/check/', SetPortofolioRequiredInfoAPIView.as_view()),
|
||||||
path('teamtag/', TagUserAPIView.as_view()),
|
path('teamtag/', TagUserAPIView.as_view()),
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from django.shortcuts import get_object_or_404
|
|||||||
|
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
from rest_framework.viewsets import ReadOnlyModelViewSet
|
from rest_framework.viewsets import ReadOnlyModelViewSet
|
||||||
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer, TokenRefreshSerializer
|
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer, TokenRefreshSerializer, TokenObtainSerializer
|
||||||
from rest_framework_simplejwt.tokens import RefreshToken
|
from rest_framework_simplejwt.tokens import RefreshToken
|
||||||
from rest_framework_simplejwt.exceptions import TokenError, InvalidToken
|
from rest_framework_simplejwt.exceptions import TokenError, InvalidToken
|
||||||
|
|
||||||
@@ -53,8 +53,12 @@ class JoinAPIView(APIView):
|
|||||||
def post(self, request):
|
def post(self, request):
|
||||||
serializer = JoinSerializer(data=request.data)
|
serializer = JoinSerializer(data=request.data)
|
||||||
if serializer.is_valid():
|
if serializer.is_valid():
|
||||||
serializer.save()
|
user = serializer.save()
|
||||||
res = Response({"message": "회원가입이 완료되었습니다."}, status=status.HTTP_200_OK)
|
access = str(RefreshToken.for_user(user).access_token)
|
||||||
|
res = Response({
|
||||||
|
"message": "회원가입이 완료되었습니다.",
|
||||||
|
"access": access
|
||||||
|
}, status=status.HTTP_200_OK)
|
||||||
return res
|
return res
|
||||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
@@ -95,18 +99,22 @@ class LoginAPIView(APIView):
|
|||||||
else: # id, 비번 둘 중 하나가 틀렸을 때
|
else: # id, 비번 둘 중 하나가 틀렸을 때
|
||||||
return Response({"message": "아이디 혹은 비밀번호가 맞지 않습니다."}, status=status.HTTP_400_BAD_REQUEST)
|
return Response({"message": "아이디 혹은 비밀번호가 맞지 않습니다."}, status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
class NicknameAPIView(APIView):
|
class CheckUserFieldDuplicateAPIView(APIView):
|
||||||
permission_classes = [AllowAny]
|
permission_classes = [AllowAny]
|
||||||
# 닉네임 중복 체크
|
# 유저 필드 중복 확인
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
nickname = request.GET.get('nickname', None)
|
field = request.query_params.get('field')
|
||||||
if not nickname:
|
value = request.query_params.get('value')
|
||||||
return Response({"message": "닉네임을 입력하세요."}, status=status.HTTP_400_BAD_REQUEST)
|
if not field or not value:
|
||||||
|
return Response({"message": "올바르지 않은 요청입니다."}, status=status.HTTP_400_BAD_REQUEST)
|
||||||
try:
|
try:
|
||||||
get_object_or_404(User, nickname=nickname)
|
if CheckUserFieldDuplicateService.check_duplicate(field, value):
|
||||||
return Response({"message": "해당 닉네임은 사용할 수 없습니다."}, status=status.HTTP_400_BAD_REQUEST)
|
return Response({"message": f"존재하는 {field} 입니다."}, status=status.HTTP_400_BAD_REQUEST)
|
||||||
except:
|
else:
|
||||||
return Response({"message": "사용할 수 있는 닉네임입니다."}, status=status.HTTP_200_OK)
|
return Response({"message": f"사용해도 되는 {field} 입니다."}, status=status.HTTP_200_OK)
|
||||||
|
except ValueError as e:
|
||||||
|
return Response({"message": str(e)}, status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
|
|
||||||
class TagUserAPIView(APIView):
|
class TagUserAPIView(APIView):
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
|
|||||||
Reference in New Issue
Block a user