API debugging 1 まだ問題あり
This commit is contained in:
145
rog/views.py
145
rog/views.py
@ -30,7 +30,7 @@ from django.http import JsonResponse
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from django.contrib.gis.db.models import Extent, Union
|
||||
|
||||
from .serializers import TestSerialiser,NewEventSerializer,NewEvent2Serializer, TeamSerializer, NewCategorySerializer,CategorySerializer, EntrySerializer, MemberSerializer, TempUserSerializer, CustomUserSerializer,EntryMemberSerializer,EntryCreationSerializer
|
||||
from .serializers import TestSerialiser,NewEventSerializer,NewEvent2Serializer, TeamSerializer, NewCategorySerializer,CategorySerializer, EntrySerializer, MemberSerializer, TempUserSerializer, CustomUserSerializer,EntryMemberSerializer,MemberCreationSerializer,EntryCreationSerializer
|
||||
from .models import TestModel
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.db.models import F
|
||||
@ -549,6 +549,25 @@ def CustomAreaNames(request):
|
||||
|
||||
|
||||
class UserActivationView(APIView):
|
||||
|
||||
def get(self, request, activation_token):
|
||||
try:
|
||||
temp_user = TempUser.objects.get(verification_code=activation_token)
|
||||
user = CustomUser.objects.create(
|
||||
email=temp_user.email,
|
||||
firstname=temp_user.firstname,
|
||||
lastname=temp_user.lastname,
|
||||
date_of_birth=temp_user.date_of_birth,
|
||||
female=temp_user.female,
|
||||
is_active=True
|
||||
)
|
||||
# Here you might want to add the user to the team they were invited to
|
||||
temp_user.delete()
|
||||
return Response({"message": "アカウントが正常にアクティベートされました。"}, status=status.HTTP_200_OK)
|
||||
except TempUser.DoesNotExist:
|
||||
return Response({"error": "無効なアクティベーショントークンです。"}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
'''
|
||||
def get(self, request, activation_token):
|
||||
try:
|
||||
user = CustomUser.objects.get(activation_token=activation_token, is_active=False)
|
||||
@ -558,6 +577,7 @@ class UserActivationView(APIView):
|
||||
return Response({"message": "アカウントが正常にアクティベートされました。"}, status=status.HTTP_200_OK)
|
||||
except CustomUser.DoesNotExist:
|
||||
return Response({"error": "無効なアクティベーショントークンです。"}, status=status.HTTP_400_BAD_REQUEST)
|
||||
'''
|
||||
|
||||
class ChangePasswordView(generics.UpdateAPIView):
|
||||
"""
|
||||
@ -721,7 +741,7 @@ class CategoryListView(generics.ListAPIView):
|
||||
'''
|
||||
|
||||
class EntryViewSet(viewsets.ModelViewSet):
|
||||
queryset = Entry.objects.all()
|
||||
#queryset = Entry.objects.all()
|
||||
serializer_class = EntrySerializer
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
@ -744,10 +764,14 @@ class EntryViewSet(viewsets.ModelViewSet):
|
||||
headers = self.get_success_headers(serializer.data)
|
||||
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
|
||||
except DRFValidationError as e:
|
||||
return Response({"error": str(e)}, status=status.HTTP_400_BAD_REQUEST)
|
||||
return Response({'error': self.format_errors(e.detail)}, status=status.HTTP_400_BAD_REQUEST)
|
||||
# except IntegrityError:
|
||||
# return Response({'error': '既に登録済みです'}, status=status.HTTP_400_BAD_REQUEST)
|
||||
except IntegrityError as e:
|
||||
return Response({'error': f'データベースエラー: {str(e)}'}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
#except ValidationError as e:
|
||||
# return Response({'error': str(e)}, status=status.HTTP_400_BAD_REQUEST)
|
||||
except Exception as e:
|
||||
return Response({'error': f"予期せぬエラーが発生しました: {str(e),'type': str(type(e))}"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||
|
||||
def perform_create(self, serializer):
|
||||
serializer.save(owner=self.request.user)
|
||||
@ -765,14 +789,88 @@ class EntryViewSet(viewsets.ModelViewSet):
|
||||
self.perform_destroy(instance)
|
||||
return Response(status=status.HTTP_204_NO_CONTENT)
|
||||
|
||||
def get_error_message(self, exception):
|
||||
if hasattr(exception, 'detail'):
|
||||
if isinstance(exception.detail, dict):
|
||||
return '. '.join([f"{key}: {', '.join(value)}" for key, value in exception.detail.items()])
|
||||
elif isinstance(exception.detail, list):
|
||||
return '. '.join(exception.detail)
|
||||
return str(exception)
|
||||
|
||||
def format_errors(self, errors):
|
||||
if isinstance(errors, list):
|
||||
return '. '.join(errors)
|
||||
elif isinstance(errors, dict):
|
||||
return '. '.join([f"{key}: {value}" if isinstance(value, str) else f"{key}: {', '.join(value)}" for key, value in errors.items()])
|
||||
else:
|
||||
return str(errors)
|
||||
|
||||
|
||||
class MemberViewSet(viewsets.ModelViewSet):
|
||||
serializer_class = MemberSerializer
|
||||
#serializer_class = MemberSerializer
|
||||
permission_classes = [permissions.IsAuthenticated,IsTeamOwner]
|
||||
|
||||
def get_serializer_class(self):
|
||||
if self.action == 'create':
|
||||
return MemberCreationSerializer
|
||||
return MemberSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
team_id = self.kwargs['team_id']
|
||||
return Member.objects.filter(team_id=team_id)
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
team = Team.objects.get(id=self.kwargs['team_id'])
|
||||
serializer = self.get_serializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
|
||||
email = serializer.validated_data.get('email', '')
|
||||
|
||||
user_data = {
|
||||
'firstname': serializer.validated_data.get('firstname', ''),
|
||||
'lastname': serializer.validated_data.get('lastname', ''),
|
||||
'date_of_birth': serializer.validated_data.get('date_of_birth'),
|
||||
'female': serializer.validated_data.get('female', False),
|
||||
'is_active': True
|
||||
}
|
||||
|
||||
if not email or email.startswith('dummy_'):
|
||||
# 直接登録
|
||||
if email:
|
||||
user, created = CustomUser.objects.get_or_create(
|
||||
email=email,
|
||||
defaults=user_data
|
||||
)
|
||||
else:
|
||||
# emailが空の場合、一意のダミーメールアドレスを生成
|
||||
dummy_email = f"dummy_{uuid.uuid4()}@example.com"
|
||||
user = CustomUser.objects.create(email=dummy_email, **user_data)
|
||||
|
||||
member = Member.objects.create(user=user, team=team)
|
||||
return Response(MemberSerializer(member).data, status=status.HTTP_201_CREATED)
|
||||
|
||||
#member = serializer.save(team=team)
|
||||
#return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||||
else:
|
||||
# 仮登録
|
||||
existing_user = CustomUser.objects.filter(email=email).first()
|
||||
if existing_user:
|
||||
# 既存ユーザーの場合、チーム招待メールを送信
|
||||
self.send_invitation_email(existing_user, team)
|
||||
return Response({"message": "Invitation sent to existing user."}, status=status.HTTP_200_OK)
|
||||
else:
|
||||
print("新規ユーザー")
|
||||
# 新規ユーザーの場合、TempUserを作成してアクティベーションメールを送信
|
||||
temp_user = TempUser.objects.create(
|
||||
email=email,
|
||||
**user_data,
|
||||
verification_code=str(uuid.uuid4())
|
||||
)
|
||||
self.send_activation_email(temp_user, team)
|
||||
return Response({"message": "Verification email sent to the user."}, status=status.HTTP_201_CREATED)
|
||||
|
||||
|
||||
'''
|
||||
def create(self, request, *args, **kwargs):
|
||||
team = Team.objects.get(id=self.kwargs['team_id'])
|
||||
serializer = self.get_serializer(data=request.data)
|
||||
@ -788,6 +886,37 @@ class MemberViewSet(viewsets.ModelViewSet):
|
||||
|
||||
headers = self.get_success_headers(serializer.data)
|
||||
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
|
||||
'''
|
||||
|
||||
def send_activation_email(self, temp_user, team):
|
||||
# アクティベーションメール送信のロジックをここに実装
|
||||
# 注意: 'user-activation' URLパターンが存在しない場合は、適切なURLを生成する方法を検討する必要があります
|
||||
|
||||
activation_url = "dummy url" #f"{settings.FRONTEND_URL}/activate/{temp_user.verification_code}"
|
||||
|
||||
# ここでemailを送信するロジックを実装
|
||||
print(f"Activation email would be sent to {temp_user.email} with URL: {activation_url}")
|
||||
|
||||
|
||||
def send_invitation_email(self, user, team):
|
||||
# チーム招待メール送信のロジック
|
||||
#invitation_url = self.request.build_absolute_uri(
|
||||
# reverse('team-invite', kwargs={'team_id': team.id, 'user_id': user.id})
|
||||
#)
|
||||
#subject = f"Invitation to join {team.name}"
|
||||
#message = f"You have been invited to join the team {team.name}. Click here to accept: {invitation_url}"
|
||||
#from_email = settings.DEFAULT_FROM_EMAIL
|
||||
#recipient_list = [user.email]
|
||||
|
||||
#send_mail(subject, message, from_email, recipient_list)
|
||||
|
||||
# チーム招待メール送信のロジックをここに実装
|
||||
# 注意: 'team-invitation' URLパターンが存在しない場合は、適切なURLを生成する方法を検討する必要があります
|
||||
# 例えば、フロントエンドのURLを直接指定する方法など
|
||||
invitation_url = "dummy url" #f"{settings.FRONTEND_URL}/team/{team.id}/invite"
|
||||
# ここでemailを送信するロジックを実装
|
||||
print(f"Invitation email would be sent to {user.email} with URL: {invitation_url}")
|
||||
|
||||
|
||||
|
||||
def perform_create(self, serializer):
|
||||
@ -905,12 +1034,12 @@ class UserEntriesView(generics.ListAPIView):
|
||||
|
||||
# イベントのカテゴリーを取得するビュー
|
||||
class EventCategoriesView(generics.ListAPIView):
|
||||
serializer_class = CategorySerializer
|
||||
serializer_class = NewCategorySerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get_queryset(self):
|
||||
event_id = self.kwargs['event_id']
|
||||
return Category.objects.filter(entry__event_id=event_id).distinct()
|
||||
return NewCategory.objects.filter(entry__event_id=event_id).distinct()
|
||||
|
||||
class RegisterView(APIView):
|
||||
def post(self, request):
|
||||
|
||||
Reference in New Issue
Block a user