temporary update to debug email
This commit is contained in:
160
rog/views.py
160
rog/views.py
@ -1,7 +1,8 @@
|
||||
from rest_framework import serializers
|
||||
from django.db import IntegrityError
|
||||
from django.urls import reverse
|
||||
from .utils import send_activation_email
|
||||
from .utils import send_verification_email,send_invitation_email,send_team_join_email,send_entry_email
|
||||
from django.conf import settings
|
||||
import uuid
|
||||
from rest_framework.exceptions import ValidationError as DRFValidationError
|
||||
|
||||
@ -12,14 +13,14 @@ from rest_framework.decorators import action
|
||||
from rest_framework.response import Response
|
||||
from django.shortcuts import get_object_or_404
|
||||
from .models import Team, Member, CustomUser, NewCategory
|
||||
from .serializers import TeamSerializer, MemberSerializer, CustomUserSerializer, TeamDetailSerializer,UserUpdateSerializer
|
||||
from .serializers import TeamSerializer, MemberSerializer, CustomUserSerializer, TeamDetailSerializer,UserUpdateSerializer,UserRegistrationSerializer
|
||||
from .permissions import IsTeamOwner
|
||||
|
||||
from curses.ascii import NUL
|
||||
from django.core.serializers import serialize
|
||||
from .models import GoalImages, Location, Location_line, Location_polygon, JpnAdminMainPerf, Useractions, GifuAreas, RogUser, CustomUser, UserTracks, GoalImages, CheckinImages, NewEvent,NewEvent2, Team, Category, NewCategory,Entry, Member, TempUser,EntryMember
|
||||
from rest_framework import viewsets
|
||||
from .serializers import LocationSerializer, Location_lineSerializer, Location_polygonSerializer, JPN_main_perfSerializer, LocationCatSerializer, CreateUserSerializer, UserSerializer, LoginUserSerializer, UseractionsSerializer, UserDestinationSerializer, GifuAreaSerializer, LocationEventNameSerializer, RogUserSerializer, UserTracksSerializer, ChangePasswordSerializer, GolaImageSerializer, CheckinImageSerializer, RegistrationSerializer, MemberWithUserSerializer
|
||||
from .serializers import LocationSerializer, Location_lineSerializer, Location_polygonSerializer, JPN_main_perfSerializer, LocationCatSerializer, UserSerializer, LoginUserSerializer, UseractionsSerializer, UserDestinationSerializer, GifuAreaSerializer, LocationEventNameSerializer, RogUserSerializer, UserTracksSerializer, ChangePasswordSerializer, GolaImageSerializer, CheckinImageSerializer, RegistrationSerializer, MemberWithUserSerializer,TempUserRegistrationSerializer
|
||||
from knox.models import AuthToken
|
||||
|
||||
from rest_framework import viewsets, generics, status
|
||||
@ -50,6 +51,9 @@ from django.utils.decorators import method_decorator
|
||||
from django.utils.encoding import force_str
|
||||
|
||||
import logging
|
||||
from datetime import datetime
|
||||
|
||||
from django.utils.dateparse import parse_date
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@ -284,7 +288,8 @@ def CatByCity(request):
|
||||
|
||||
|
||||
class RegistrationAPI(generics.GenericAPIView):
|
||||
serializer_class = CreateUserSerializer
|
||||
#serializer_class = CreateUserSerializer
|
||||
serializer_class = UserRegistrationSerializer
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
serializer = self.get_serializer(data=request.data)
|
||||
@ -410,6 +415,20 @@ def DeleteAccount(request):
|
||||
return Response({"result":"user deleted"})
|
||||
return Response({"result":"user not found"})
|
||||
|
||||
'''
|
||||
def send_verification_email(self, temp_user):
|
||||
subject = '仮登録の確認'
|
||||
message = f'以下のリンクをクリックして登録を完了してください:\n{settings.FRONTEND_URL}/verify/{temp_user.verification_code}'
|
||||
from_email = settings.DEFAULT_FROM_EMAIL
|
||||
recipient_list = [temp_user.email]
|
||||
|
||||
try:
|
||||
send_mail(subject, message, from_email, recipient_list)
|
||||
logger.info(f"Verification email sent to {temp_user.email}")
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to send verification email to {temp_user.email}. Error: {str(e)}")
|
||||
'''
|
||||
|
||||
|
||||
def UserActionViewset(request):
|
||||
user_id = request.GET.get('user_id')
|
||||
@ -622,13 +641,25 @@ class TestActionViewSet(viewsets.ModelViewSet):
|
||||
def PrivacyView(request):
|
||||
return render(request, "rog/privacy.html")
|
||||
|
||||
|
||||
class RegistrationView(APIView):
|
||||
@transaction.atomic
|
||||
def post(self, request):
|
||||
serializer = RegistrationSerializer(data=request.data)
|
||||
serializer = UserRegistrationSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
serializer.save()
|
||||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
try:
|
||||
user = serializer.save()
|
||||
logger.info(f"New user registered: {user.email}")
|
||||
return Response({"message": "ユーザー登録が完了しました。"}, status=status.HTTP_201_CREATED)
|
||||
except Exception as e:
|
||||
logger.error(f"Error during user registration: {str(e)}")
|
||||
return Response({"error": "ユーザー登録中にエラーが発生しました。"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||
else:
|
||||
logger.warning(f"Invalid registration data: {serializer.errors}")
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
|
||||
|
||||
# Akira
|
||||
|
||||
@ -751,10 +782,13 @@ class EntryViewSet(viewsets.ModelViewSet):
|
||||
|
||||
def get_queryset(self):
|
||||
user = self.request.user
|
||||
# ユーザーが所属するチームのIDを取得
|
||||
team_ids = Member.objects.filter(user=user).values_list('team_id', flat=True)
|
||||
# そのチームに関連するエントリーを取得
|
||||
return Entry.objects.filter(team__id__in=team_ids)
|
||||
# ユーザーが所有するチームのIDを取得
|
||||
owned_team_ids = Team.objects.filter(owner=user).values_list('id', flat=True)
|
||||
# ユーザーがメンバーとして所属するチームのIDを取得
|
||||
member_team_ids = Member.objects.filter(user=user).values_list('team_id', flat=True)
|
||||
# 両方のチームに関連するエントリーを取得
|
||||
return Entry.objects.filter(Q(team__id__in=owned_team_ids) | Q(team__id__in=member_team_ids))
|
||||
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
serializer = self.get_serializer(data=request.data)
|
||||
@ -831,7 +865,6 @@ class MemberViewSet(viewsets.ModelViewSet):
|
||||
'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_'):
|
||||
@ -839,7 +872,7 @@ class MemberViewSet(viewsets.ModelViewSet):
|
||||
if email:
|
||||
user, created = CustomUser.objects.get_or_create(
|
||||
email=email,
|
||||
defaults=user_data
|
||||
defaults={**user_data, 'is_active':True}
|
||||
)
|
||||
else:
|
||||
# emailが空の場合、一意のダミーメールアドレスを生成
|
||||
@ -856,18 +889,17 @@ class MemberViewSet(viewsets.ModelViewSet):
|
||||
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)
|
||||
send_team_join_email(existing_user, team)
|
||||
return Response({"message": "Invitation for your team 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)
|
||||
send_invitation_email(temp_user, team)
|
||||
return Response({"message": "Invitation email sent to the user."}, status=status.HTTP_201_CREATED)
|
||||
|
||||
|
||||
'''
|
||||
@ -888,6 +920,7 @@ class MemberViewSet(viewsets.ModelViewSet):
|
||||
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
|
||||
'''
|
||||
|
||||
'''
|
||||
def send_activation_email(self, temp_user, team):
|
||||
# アクティベーションメール送信のロジックをここに実装
|
||||
# 注意: 'user-activation' URLパターンが存在しない場合は、適切なURLを生成する方法を検討する必要があります
|
||||
@ -897,7 +930,6 @@ class MemberViewSet(viewsets.ModelViewSet):
|
||||
# ここで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(
|
||||
@ -916,6 +948,7 @@ class MemberViewSet(viewsets.ModelViewSet):
|
||||
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}")
|
||||
'''
|
||||
|
||||
|
||||
|
||||
@ -923,25 +956,60 @@ class MemberViewSet(viewsets.ModelViewSet):
|
||||
team = Team.objects.get(id=self.kwargs['team_id'])
|
||||
serializer.save(team=team)
|
||||
|
||||
@transaction.atomic
|
||||
def update(self, request, *args, **kwargs):
|
||||
partial = kwargs.pop('partial', False)
|
||||
#partial = kwargs.pop('partial', False)
|
||||
instance = self.get_object()
|
||||
serializer = self.get_serializer(instance, data=request.data, partial=partial)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
user = instance.user
|
||||
logger.debug(f"Updating user: {user.email}")
|
||||
logger.debug(f"Received data: {request.data}")
|
||||
|
||||
if not instance.user.email.startswith('dummy_'):
|
||||
return Response({"error": "このユーザーの情報は更新できません。"}, status=status.HTTP_400_BAD_REQUEST)
|
||||
if user.email.startswith('dummy_'):
|
||||
logger.debug("User has dummy email, proceeding with update")
|
||||
|
||||
# 直接データを更新
|
||||
user.firstname = request.data.get('firstname', user.firstname)
|
||||
user.lastname = request.data.get('lastname', user.lastname)
|
||||
|
||||
# 日付の処理
|
||||
date_of_birth = request.data.get('date_of_birth')
|
||||
if date_of_birth:
|
||||
try:
|
||||
date_of_birth = date_of_birth.translate(str.maketrans("0123456789", "0123456789"))
|
||||
parsed_date = parse_date(date_of_birth)
|
||||
if parsed_date:
|
||||
user.date_of_birth = parsed_date
|
||||
else:
|
||||
raise ValueError("Invalid date format")
|
||||
except ValueError:
|
||||
logger.error(f"Invalid date format: {date_of_birth}")
|
||||
return Response({"error": "Invalid date format. Use YYYY-MM-DD."}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
self.perform_update(serializer)
|
||||
user.female = request.data.get('female', user.female)
|
||||
|
||||
user.save()
|
||||
logger.debug(f"User updated: firstname={user.firstname}, lastname={user.lastname}, date_of_birth={user.date_of_birth}, female={user.female}")
|
||||
|
||||
# Memberインスタンスも更新
|
||||
serializer = self.get_serializer(instance, data=request.data, partial=True)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
self.perform_update(serializer)
|
||||
|
||||
# 更新後のデータを取得
|
||||
updated_instance = self.get_object()
|
||||
updated_serializer = self.get_serializer(updated_instance)
|
||||
|
||||
logger.debug(f"Updated user data: {updated_serializer.data}")
|
||||
return Response(updated_serializer.data)
|
||||
else:
|
||||
logger.debug("User does not have dummy email, update not allowed")
|
||||
return Response({"error": "このユーザーの情報は更新できません。"}, status=status.HTTP_403_FORBIDDEN)
|
||||
|
||||
if getattr(instance, '_prefetched_objects_cache', None):
|
||||
instance._prefetched_objects_cache = {}
|
||||
|
||||
return Response(serializer.data)
|
||||
|
||||
def perform_update(self, serializer):
|
||||
serializer.save()
|
||||
logger.debug("perform_update called")
|
||||
|
||||
|
||||
def get_object(self):
|
||||
queryset = self.get_queryset()
|
||||
@ -1041,6 +1109,7 @@ class EventCategoriesView(generics.ListAPIView):
|
||||
event_id = self.kwargs['event_id']
|
||||
return NewCategory.objects.filter(entry__event_id=event_id).distinct()
|
||||
|
||||
# ユーザー仮登録
|
||||
class RegisterView(APIView):
|
||||
def post(self, request):
|
||||
serializer = TempUserSerializer(data=request.data)
|
||||
@ -1053,16 +1122,33 @@ class RegisterView(APIView):
|
||||
verification_url = request.build_absolute_uri(
|
||||
reverse('verify-email', kwargs={'verification_code': verification_code})
|
||||
)
|
||||
send_mail(
|
||||
'Verify your email',
|
||||
f'Click the link to verify your email: {verification_url}',
|
||||
settings.DEFAULT_FROM_EMAIL,
|
||||
[temp_user.email],
|
||||
fail_silently=False,
|
||||
)
|
||||
send_verification_email(temp_user,verifiction_url)
|
||||
#send_mail(
|
||||
# 'Verify your email',
|
||||
# f'Click the link to verify your email: {verification_url}',
|
||||
# settings.DEFAULT_FROM_EMAIL,
|
||||
# [temp_user.email],
|
||||
# fail_silently=False,
|
||||
#)
|
||||
return Response({'message': 'Verification email sent'}, status=status.HTTP_201_CREATED)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
class TempUserRegistrationView(APIView):
|
||||
def post(self, request):
|
||||
serializer = TempUserRegistrationSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
temp_user = serializer.save()
|
||||
verification_code = uuid.uuid4()
|
||||
temp_user.verification_code = verification_code
|
||||
temp_user.save()
|
||||
verification_url = request.build_absolute_uri(
|
||||
reverse('verify-email', kwargs={'verification_code': verification_code})
|
||||
)
|
||||
send_verification_email(temp_user,verification_url) #招待メールを送る。
|
||||
return Response({"message": "仮登録が完了しました。招待メールを送信しました。"}, status=status.HTTP_201_CREATED)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
# アクティベーション
|
||||
class VerifyEmailView(APIView):
|
||||
def get(self, request, verification_code):
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user