parent
8adbfdada8
commit
fec05e32b2
@ -1,5 +1,4 @@ |
||||
from django.contrib.auth.tokens import PasswordResetTokenGenerator |
||||
# from django.utils import six |
||||
|
||||
class TokenGenerator(PasswordResetTokenGenerator): |
||||
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