parent
8adbfdada8
commit
fec05e32b2
@ -1,5 +1,4 @@ |
|||||||
from django.contrib.auth.tokens import PasswordResetTokenGenerator |
from django.contrib.auth.tokens import PasswordResetTokenGenerator |
||||||
# from django.utils import six |
|
||||||
|
|
||||||
class TokenGenerator(PasswordResetTokenGenerator): |
class TokenGenerator(PasswordResetTokenGenerator): |
||||||
def _make_hash_value(self, user, timestamp): |
def _make_hash_value(self, user, timestamp): |
||||||
@ -0,0 +1,33 @@ |
|||||||
|
from django.urls import include, path |
||||||
|
from rest_framework import routers |
||||||
|
from rest_framework.authtoken.views import obtain_auth_token |
||||||
|
|
||||||
|
from . import views |
||||||
|
|
||||||
|
router = routers.DefaultRouter() |
||||||
|
router.register(r'users', views.UserViewSet) |
||||||
|
router.register(r'clubs', views.ClubViewSet) |
||||||
|
router.register(r'tournaments', views.TournamentViewSet) |
||||||
|
router.register(r'events', views.EventViewSet) |
||||||
|
router.register(r'rounds', views.RoundViewSet) |
||||||
|
router.register(r'group-stages', views.GroupStageViewSet) |
||||||
|
router.register(r'matches', views.MatchViewSet) |
||||||
|
router.register(r'team-scores', views.TeamScoreViewSet) |
||||||
|
router.register(r'team-registrations', views.TeamRegistrationViewSet) |
||||||
|
router.register(r'player-registrations', views.PlayerRegistrationViewSet) |
||||||
|
router.register(r'purchases', views.PurchaseViewSet) |
||||||
|
router.register(r'courts', views.CourtViewSet) |
||||||
|
router.register(r'date-intervals', views.DateIntervalViewSet) |
||||||
|
router.register(r'failed-api-calls', views.FailedApiCallViewSet) |
||||||
|
|
||||||
|
urlpatterns = [ |
||||||
|
path('', include(router.urls)), |
||||||
|
|
||||||
|
path('api-token-auth/', obtain_auth_token, name='api_token_auth'), |
||||||
|
path("user-by-token/", views.user_by_token, name="user_by_token"), |
||||||
|
path("change-password/", views.ChangePasswordView.as_view(), name="change_password"), |
||||||
|
|
||||||
|
# forgotten password |
||||||
|
path('dj-rest-auth/', include('dj_rest_auth.urls')), |
||||||
|
|
||||||
|
] |
||||||
@ -0,0 +1,170 @@ |
|||||||
|
from .serializers import ClubSerializer, CourtSerializer, DateIntervalSerializer, TournamentSerializer, UserSerializer, ChangePasswordSerializer, EventSerializer, RoundSerializer, GroupStageSerializer, MatchSerializer, TeamScoreSerializer, TeamRegistrationSerializer, PlayerRegistrationSerializer, LiveMatchSerializer, PurchaseSerializer, UserUpdateSerializer, FailedApiCallSerializer |
||||||
|
from tournaments.models import Club, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamScore, TeamRegistration, PlayerRegistration, Court, DateInterval, Purchase, FailedApiCall |
||||||
|
|
||||||
|
from rest_framework import viewsets, permissions |
||||||
|
from rest_framework.authtoken.models import Token |
||||||
|
from rest_framework.response import Response |
||||||
|
from rest_framework.decorators import api_view |
||||||
|
from rest_framework import status |
||||||
|
from rest_framework.generics import UpdateAPIView |
||||||
|
from rest_framework.exceptions import MethodNotAllowed |
||||||
|
from rest_framework.permissions import IsAuthenticated |
||||||
|
|
||||||
|
from django.db.models import Q |
||||||
|
|
||||||
|
from .permissions import IsClubOwner |
||||||
|
|
||||||
|
@api_view(['GET']) |
||||||
|
def user_by_token(request): |
||||||
|
serializer = UserSerializer(request.user) |
||||||
|
return Response(serializer.data, status=status.HTTP_200_OK) |
||||||
|
|
||||||
|
class UserViewSet(viewsets.ModelViewSet): |
||||||
|
queryset = CustomUser.objects.all() |
||||||
|
serializer_class = UserUpdateSerializer |
||||||
|
permission_classes = [] # Users are public whereas the other requests are only for logged users |
||||||
|
|
||||||
|
def get_serializer_class(self): |
||||||
|
# Use UserSerializer for other actions (e.g., create, retrieve) |
||||||
|
if self.action in ['create', 'retrieve']: |
||||||
|
return UserSerializer |
||||||
|
return self.serializer_class |
||||||
|
|
||||||
|
class ClubViewSet(viewsets.ModelViewSet): |
||||||
|
queryset = Club.objects.all() |
||||||
|
serializer_class = ClubSerializer |
||||||
|
permission_classes = [IsClubOwner] # Clubs are public whereas the other requests are only for logged users |
||||||
|
|
||||||
|
def perform_create(self, serializer): |
||||||
|
serializer.save(creator=self.request.user) |
||||||
|
|
||||||
|
class TournamentViewSet(viewsets.ModelViewSet): |
||||||
|
queryset = Tournament.objects.all() |
||||||
|
serializer_class = TournamentSerializer |
||||||
|
|
||||||
|
def get_queryset(self): |
||||||
|
if self.request.user.is_anonymous: |
||||||
|
return [] |
||||||
|
return self.queryset.filter(event__creator=self.request.user) |
||||||
|
|
||||||
|
class PurchaseViewSet(viewsets.ModelViewSet): |
||||||
|
queryset = Purchase.objects.all() |
||||||
|
serializer_class = PurchaseSerializer |
||||||
|
|
||||||
|
def get_queryset(self): |
||||||
|
if self.request.user: |
||||||
|
return self.queryset.filter(user=self.request.user) |
||||||
|
return [] |
||||||
|
|
||||||
|
def put(self, request, pk): |
||||||
|
raise MethodNotAllowed('PUT') |
||||||
|
|
||||||
|
def patch(self, request, pk): |
||||||
|
raise MethodNotAllowed('PATCH') |
||||||
|
|
||||||
|
def delete(self, request, pk): |
||||||
|
raise MethodNotAllowed('DELETE') |
||||||
|
|
||||||
|
# class ExpandedTournamentViewSet(viewsets.ModelViewSet): |
||||||
|
# queryset = Tournament.objects.all() |
||||||
|
# serializer_class = ExpandedTournamentSerializer |
||||||
|
|
||||||
|
class ChangePasswordView(UpdateAPIView): |
||||||
|
serializer_class = ChangePasswordSerializer |
||||||
|
|
||||||
|
def update(self, request, *args, **kwargs): |
||||||
|
serializer = self.get_serializer(data=request.data) |
||||||
|
serializer.is_valid(raise_exception=True) |
||||||
|
user = serializer.save() |
||||||
|
# if using drf authtoken, create a new token |
||||||
|
if hasattr(user, 'auth_token'): |
||||||
|
user.auth_token.delete() |
||||||
|
token, created = Token.objects.get_or_create(user=user) |
||||||
|
# return new token |
||||||
|
return Response({'token': token.key}, status=status.HTTP_200_OK) |
||||||
|
|
||||||
|
class EventViewSet(viewsets.ModelViewSet): |
||||||
|
queryset = Event.objects.all() |
||||||
|
serializer_class = EventSerializer |
||||||
|
|
||||||
|
def get_queryset(self): |
||||||
|
if self.request.user.is_anonymous: |
||||||
|
return [] |
||||||
|
return self.queryset.filter(creator=self.request.user) |
||||||
|
|
||||||
|
class RoundViewSet(viewsets.ModelViewSet): |
||||||
|
queryset = Round.objects.all() |
||||||
|
serializer_class = RoundSerializer |
||||||
|
|
||||||
|
def get_queryset(self): |
||||||
|
if self.request.user: |
||||||
|
return self.queryset.filter(tournament__event__creator=self.request.user) |
||||||
|
return [] |
||||||
|
|
||||||
|
class GroupStageViewSet(viewsets.ModelViewSet): |
||||||
|
queryset = GroupStage.objects.all() |
||||||
|
serializer_class = GroupStageSerializer |
||||||
|
|
||||||
|
def get_queryset(self): |
||||||
|
if self.request.user: |
||||||
|
return self.queryset.filter(tournament__event__creator=self.request.user) |
||||||
|
return [] |
||||||
|
|
||||||
|
class MatchViewSet(viewsets.ModelViewSet): |
||||||
|
queryset = Match.objects.all() |
||||||
|
serializer_class = MatchSerializer |
||||||
|
|
||||||
|
def get_queryset(self): |
||||||
|
if self.request.user: |
||||||
|
return self.queryset.filter(Q(group_stage__tournament__event__creator=self.request.user) | Q(round__tournament__event__creator=self.request.user)) |
||||||
|
return [] |
||||||
|
|
||||||
|
class TeamScoreViewSet(viewsets.ModelViewSet): |
||||||
|
queryset = TeamScore.objects.all() |
||||||
|
serializer_class = TeamScoreSerializer |
||||||
|
|
||||||
|
def get_queryset(self): |
||||||
|
if self.request.user: |
||||||
|
return self.queryset.filter(team_registration__tournament__event__creator=self.request.user) |
||||||
|
return [] |
||||||
|
|
||||||
|
class TeamRegistrationViewSet(viewsets.ModelViewSet): |
||||||
|
queryset = TeamRegistration.objects.all() |
||||||
|
serializer_class = TeamRegistrationSerializer |
||||||
|
|
||||||
|
def get_queryset(self): |
||||||
|
if self.request.user: |
||||||
|
return self.queryset.filter(tournament__event__creator=self.request.user) |
||||||
|
return [] |
||||||
|
|
||||||
|
class PlayerRegistrationViewSet(viewsets.ModelViewSet): |
||||||
|
queryset = PlayerRegistration.objects.all() |
||||||
|
serializer_class = PlayerRegistrationSerializer |
||||||
|
|
||||||
|
def get_queryset(self): |
||||||
|
if self.request.user: |
||||||
|
return self.queryset.filter(team_registration__tournament__event__creator=self.request.user) |
||||||
|
return [] |
||||||
|
|
||||||
|
class CourtViewSet(viewsets.ModelViewSet): |
||||||
|
queryset = Court.objects.all() |
||||||
|
serializer_class = CourtSerializer |
||||||
|
|
||||||
|
class DateIntervalViewSet(viewsets.ModelViewSet): |
||||||
|
queryset = DateInterval.objects.all() |
||||||
|
serializer_class = DateIntervalSerializer |
||||||
|
|
||||||
|
def get_queryset(self): |
||||||
|
if self.request.user: |
||||||
|
return self.queryset.filter(event__creator=self.request.user) |
||||||
|
return [] |
||||||
|
|
||||||
|
class FailedApiCallViewSet(viewsets.ModelViewSet): |
||||||
|
queryset = FailedApiCall.objects.all() |
||||||
|
serializer_class = FailedApiCallSerializer |
||||||
|
|
||||||
|
def get_queryset(self): |
||||||
|
return [] |
||||||
|
|
||||||
|
def perform_create(self, serializer): |
||||||
|
serializer.save(user=self.request.user) |
||||||
Loading…
Reference in new issue