Merge pull request #49 from plers-org/sm/#48

Sm/#48
This commit is contained in:
NKEY
2025-05-06 20:06:40 +09:00
committed by GitHub
3 changed files with 32 additions and 19 deletions

View File

@@ -8,14 +8,19 @@ from datetime import timedelta
# 30일 이전 일수 계산
thirty_days_ago = timezone.now() - timedelta(days=30)
DUPLICATE_CHECK = {
'email': 'email',
'nickname': 'nickname'
}
class CheckUserFieldDuplicateService:
@staticmethod
def check_nickname_duplicate(query):
pass
def check_duplicate(field: str, value: str) -> bool:
if field not in DUPLICATE_CHECK:
raise ValueError(f"{field}는 지원하지 않는 필드입니다.")
@staticmethod
def check_custom_url_duplicate():
pass
filter_dict = {DUPLICATE_CHECK[field]:value}
return User.objects.filter(**filter_dict).exists()

View File

@@ -9,7 +9,7 @@ urlpatterns = [
path('refresh-token/', RefreshAPIView.as_view()),
path('join/', JoinAPIView.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/check/', SetPortofolioRequiredInfoAPIView.as_view()),
path('teamtag/', TagUserAPIView.as_view()),

View File

@@ -4,7 +4,7 @@ from django.shortcuts import get_object_or_404
from rest_framework.views import APIView
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.exceptions import TokenError, InvalidToken
@@ -53,8 +53,12 @@ class JoinAPIView(APIView):
def post(self, request):
serializer = JoinSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
res = Response({"message": "회원가입이 완료되었습니다."}, status=status.HTTP_200_OK)
user = serializer.save()
access = str(RefreshToken.for_user(user).access_token)
res = Response({
"message": "회원가입이 완료되었습니다.",
"access": access
}, status=status.HTTP_200_OK)
return res
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
@@ -95,18 +99,22 @@ class LoginAPIView(APIView):
else: # id, 비번 둘 중 하나가 틀렸을 때
return Response({"message": "아이디 혹은 비밀번호가 맞지 않습니다."}, status=status.HTTP_400_BAD_REQUEST)
class NicknameAPIView(APIView):
class CheckUserFieldDuplicateAPIView(APIView):
permission_classes = [AllowAny]
# 닉네임 중복 체크
# 유저 필드 중복 확인
def get(self, request):
nickname = request.GET.get('nickname', None)
if not nickname:
return Response({"message": "닉네임을 입력하세요."}, status=status.HTTP_400_BAD_REQUEST)
field = request.query_params.get('field')
value = request.query_params.get('value')
if not field or not value:
return Response({"message": "올바르지 않은 요청입니다."}, status=status.HTTP_400_BAD_REQUEST)
try:
get_object_or_404(User, nickname=nickname)
return Response({"message": "해당 닉네임은 사용할 수 없습니다."}, status=status.HTTP_400_BAD_REQUEST)
except:
return Response({"message": "사용할 수 있는 닉네임입니다."}, status=status.HTTP_200_OK)
if CheckUserFieldDuplicateService.check_duplicate(field, value):
return Response({"message": f"존재하는 {field}니다."}, status=status.HTTP_400_BAD_REQUEST)
else:
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):
def get(self, request):