temporary update

This commit is contained in:
2024-07-24 00:38:32 +00:00
parent 6f79d9a4be
commit 09e39987e2
27 changed files with 45426 additions and 24 deletions

View File

@ -1,8 +1,8 @@
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
from .models import GoalImages, Location, Location_line, Location_polygon, JpnAdminMainPerf, Useractions, GifuAreas, RogUser, CustomUser, UserTracks, GoalImages, CheckinImages, NewEvent, Team, Category, Entry, Member, TempUser
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
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 knox.models import AuthToken
from rest_framework import viewsets, generics, status
@ -14,7 +14,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
from .serializers import TestSerialiser,NewEventSerializer, TeamSerializer, CategorySerializer, EntrySerializer, MemberSerializer, TempUserSerializer, CustomUserSerializer
from .models import TestModel
from django.shortcuts import get_object_or_404
from django.db.models import F
@ -29,8 +29,10 @@ from rest_framework.parsers import JSONParser, MultiPartParser
from django.views.decorators.csrf import csrf_exempt
import uuid
from django.shortcuts import render
from .permissions import IsMemberOrTeamOwner
from django.utils.decorators import method_decorator
from django.utils.encoding import force_str
class LocationViewSet(viewsets.ModelViewSet):
queryset=Location.objects.all()
@ -556,4 +558,184 @@ class RegistrationView(APIView):
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)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
# Akira
@method_decorator(csrf_exempt, name='dispatch')
class NewEventViewSet(viewsets.ModelViewSet):
queryset = NewEvent.objects.all()
serializer_class = NewEventSerializer
permission_classes = [IsAuthenticated]
@method_decorator(csrf_exempt, name='dispatch')
class NewEventListView(generics.ListAPIView):
queryset = NewEvent.objects.all()
serializer_class = NewEventSerializer
permission_classes = [IsAuthenticated]
class TeamViewSet(viewsets.ModelViewSet):
queryset = Team.objects.all()
serializer_class = TeamSerializer
permission_classes = [permissions.IsAuthenticated]
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
class CategoryViewSet(viewsets.ModelViewSet):
queryset = Category.objects.all()
serializer_class = CategorySerializer
permission_classes = [IsAuthenticated]
@method_decorator(csrf_exempt, name='dispatch')
class CategoryListView(generics.ListAPIView):
queryset = Category.objects.all()
serializer_class = CategorySerializer
permission_classes = [IsAuthenticated]
'''
def get(self, request):
categories = Category.objects.all()
data = []
for category in categories:
category_name = force_str(category.category_name)
data.append({
'category_name': category_name,
# その他のフィールド
})
return Response(data)
'''
class EntryViewSet(viewsets.ModelViewSet):
queryset = Entry.objects.all()
serializer_class = EntrySerializer
permission_classes = [permissions.IsAuthenticated]
def perform_create(self, serializer):
team = Team.objects.get(owner=self.request.user)
serializer.save(team=team)
class MemberViewSet(viewsets.ModelViewSet):
queryset = Member.objects.all()
serializer_class = MemberSerializer
permission_classes = [permissions.IsAuthenticated]
class TempUserViewSet(viewsets.ModelViewSet):
queryset = TempUser.objects.all()
serializer_class = TempUserSerializer
permission_classes = [IsAuthenticated]
# CustomUserViewSetの修正
class CustomUserViewSet(viewsets.ModelViewSet):
queryset = CustomUser.objects.all()
serializer_class = CustomUserSerializer
permission_classes = [IsAuthenticated]
def get_queryset(self):
user = self.request.user
if user.is_staff:
return CustomUser.objects.all()
return CustomUser.objects.filter(id=user.id)
# 追加の機能として、チームメンバーを取得するビュー
from rest_framework.decorators import action
from rest_framework.response import Response
class TeamMembersView(generics.ListAPIView):
serializer_class = MemberSerializer
permission_classes = [IsAuthenticated]
def get_queryset(self):
team_id = self.kwargs['team_id']
return Member.objects.filter(team_id=team_id)
# ユーザーのエントリーを取得するビュー
class UserEntriesView(generics.ListAPIView):
serializer_class = EntrySerializer
permission_classes = [IsAuthenticated]
def get_queryset(self):
user = self.request.user
return Entry.objects.filter(team__owner=user)
# イベントのカテゴリーを取得するビュー
class EventCategoriesView(generics.ListAPIView):
serializer_class = CategorySerializer
permission_classes = [IsAuthenticated]
def get_queryset(self):
event_id = self.kwargs['event_id']
return Category.objects.filter(entry__event_id=event_id).distinct()
class RegisterView(APIView):
def post(self, request):
serializer = TempUserSerializer(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_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 VerifyEmailView(APIView):
def get(self, request, verification_code):
try:
temp_user = TempUser.objects.get(verification_code=verification_code)
if temp_user.is_valid():
user_data = {
'email': temp_user.email,
'is_rogaining': temp_user.is_rogaining,
'zekken_number': temp_user.zekken_number,
'event_code': temp_user.event_code,
'team_name': temp_user.team_name,
'group': temp_user.group,
'firstname': temp_user.firstname,
'lastname': temp_user.lastname,
'date_of_birth': temp_user.date_of_birth,
'female': temp_user.female,
}
# CustomUserを作成
user = CustomUser.objects.create_user(
email=user_data['email'],
password=temp_user.password,
**{k: v for k, v in user_data.items() if k != 'email'}
)
temp_user.delete()
return Response({'message': 'Email verified and user created'}, status=status.HTTP_201_CREATED)
else:
return Response({'message': 'Verification link expired'}, status=status.HTTP_400_BAD_REQUEST)
except TempUser.DoesNotExist:
return Response({'message': 'Invalid verification code'}, status=status.HTTP_400_BAD_REQUEST)
class MemberUserDetailView(generics.RetrieveAPIView):
serializer_class = MemberWithUserSerializer
permission_classes = [IsAuthenticated]
def get_queryset(self):
return Member.objects.select_related('user', 'team')
class TeamMembersWithUserView(generics.ListAPIView):
serializer_class = MemberWithUserSerializer
permission_classes = [IsAuthenticated]
def get_queryset(self):
team_id = self.kwargs['team_id']
return Member.objects.filter(team_id=team_id).select_related('user', 'team')